In questo articolo, spiegheremo una delle attività critiche dell’amministrazione di sistema Linux: il monitoraggio delle prestazioni in merito al carico di sistema/CPU e alle medie di carico.
Prima di procedere ulteriormente, comprendiamo queste due frasi importanti in tutti i sistemi simili a Unix:
- Carico di sistema/Carico CPU – è una misurazione dell’utilizzo eccessivo o insufficiente della CPU in un sistema Linux; il numero di processi che vengono eseguiti dalla CPU o in stato di attesa.
- Media di carico – è la media del carico di sistema calcolata su un periodo di tempo di 1, 5 e 15 minuti.
In Linux, il carico medio è tecnicamente considerato una media mobile dei processi nella sua coda di esecuzione (kernel) contrassegnati come in esecuzione o non interrompibili.
Nota che:
- Tutti, se non la maggior parte, dei sistemi alimentati da Linux o altri sistemi simili a Unix mostreranno probabilmente i valori della media di carico da qualche parte per un utente.
- A downright idle Linux system may have a load average of zero, excluding the idle process.
- Quasi tutti i sistemi simili a Unix contano solo i processi negli stati di esecuzione o di attesa. Ma non è questo il caso di Linux, che include processi negli stati di sonno non interrompibile; quelli in attesa di altre risorse di sistema come I/O disco ecc.
Come monitorare la media di carico di sistema Linux
Ci sono numerosi modi per monitorare la media di carico di sistema, tra cui uptime che mostra da quanto tempo il sistema è in esecuzione, il numero di utenti insieme alle medie di carico:
$ uptime 07:13:53 up 8 days, 19 min, 1 user, load average: 1.98, 2.15, 2.21
I numeri vengono letti da sinistra a destra, e l’output sopra significa che:
- la media di carico nell’ultimo 1 minuto è 1.98
- Il carico medio degli ultimi 5 minuti è 2.15
- Il carico medio degli ultimi 15 minuti è 2.21
Carichi medi elevati implicano che un sistema è sovraccarico; molti processi stanno aspettando il tempo della CPU.
Scopriremo questo nella prossima sezione in relazione al numero di core della CPU. Inoltre, possiamo anche utilizzare altri strumenti ben noti come top e glances che mostrano lo stato in tempo reale di un sistema Linux in esecuzione, oltre a molti altri strumenti:
Comando Top
$ top
top - 12:51:42 up 2:11, 1 user, load average: 1.22, 1.12, 1.26 Tasks: 243 total, 1 running, 242 sleeping, 0 stopped, 0 zombie %Cpu(s): 17.4 us, 2.9 sy, 0.3 ni, 74.8 id, 4.6 wa, 0.0 hi, 0.0 si, 0.0 st KiB Mem : 8069036 total, 388060 free, 4381184 used, 3299792 buff/cache KiB Swap: 3906556 total, 3901876 free, 4680 used. 2807464 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 6265 tecmint 20 0 1244348 170680 83616 S 13.3 2.1 6:47.72 Headset 2301 tecmint 9 -11 640332 13344 9932 S 6.7 0.2 2:18.96 pulseaudio 2459 tecmint 20 0 1707692 315628 62992 S 6.7 3.9 6:55.45 cinnamon 2957 tecmint 20 0 2644644 1.035g 137968 S 6.7 13.5 50:11.13 firefox 3208 tecmint 20 0 507060 52136 33152 S 6.7 0.6 0:04.34 gnome-terminal- 3272 tecmint 20 0 1521380 391324 178348 S 6.7 4.8 6:21.01 chrome 6220 tecmint 20 0 1595392 106964 76836 S 6.7 1.3 3:31.94 Headset 1 root 20 0 120056 6204 3964 S 0.0 0.1 0:01.83 systemd 2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd 3 root 20 0 0 0 0 S 0.0 0.0 0:00.10 ksoftirqd/0 5 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/0:0H ....
Strumento Glances
$ glances
TecMint (LinuxMint 18 64bit / Linux 4.4.0-21-generic) Uptime: 2:16:06 CPU 16.4% nice: 0.1% LOAD 4-core MEM 60.5% active: 4.90G SWAP 0.1% user: 10.2% irq: 0.0% 1 min: 1.20 total: 7.70G inactive: 2.07G total: 3.73G system: 3.4% iowait: 2.7% 5 min: 1.16 used: 4.66G buffers: 242M used: 4.57M idle: 83.6% steal: 0.0% 15 min: 1.24 free: 3.04G cached: 2.58G free: 3.72G NETWORK Rx/s Tx/s TASKS 253 (883 thr), 1 run, 252 slp, 0 oth sorted automatically by cpu_percent, flat view enp1s0 525Kb 31Kb lo 2Kb 2Kb CPU% MEM% VIRT RES PID USER NI S TIME+ IOR/s IOW/s Command wlp2s0 0b 0b 14.6 13.3 2.53G 1.03G 2957 tecmint 0 S 51:49.10 0 40K /usr/lib/firefox/firefox 7.4 2.2 1.16G 176M 6265 tecmint 0 S 7:08.18 0 0 /usr/lib/Headset/Headset --type=renderer --no-sandbox --primordial-pipe-token=879B36514C6BEDB183D3E4142774D1DF --lan DISK I/O R/s W/s 4.9 3.9 1.63G 310M 2459 tecmint 0 R 7:12.18 0 0 cinnamon --replace ram0 0 0 4.2 0.2 625M 13.0M 2301 tecmint -11 S 2:29.72 0 0 /usr/bin/pulseaudio --start --log-target=syslog ram1 0 0 4.2 1.3 1.52G 105M 6220 tecmint 0 S 3:42.64 0 0 /usr/lib/Headset/Headset ram10 0 0 2.9 0.8 409M 66.7M 6240 tecmint 0 S 2:40.44 0 0 /usr/lib/Headset/Headset --type=gpu-process --no-sandbox --supports-dual-gpus=false --gpu-driver-bug-workarounds=7,2 ram11 0 0 2.9 1.8 531M 142M 1690 root 0 S 6:03.79 0 0 /usr/lib/xorg/Xorg :0 -audit 0 -auth /var/lib/mdm/:0.Xauth -nolisten tcp vt8 ram12 0 0 2.6 0.3 79.3M 23.8M 9651 tecmint 0 R 0:00.71 0 0 /usr/bin/python3 /usr/bin/glances ram13 0 0 1.6 4.8 1.45G 382M 3272 tecmint 0 S 6:25.30 0 4K /opt/google/chrome/chrome ...
I carichi medi mostrati da questi strumenti vengono letti dal file /proc/loadavg, che puoi visualizzare utilizzando il comando cat come segue:
$ cat /proc/loadavg 2.48 1.69 1.42 5/889 10570
Per monitorare i carichi medi in formato grafico, controlla: ttyload – Mostra un Grafico a Colori del Carico Medio di Linux nel Terminale
Sui computer desktop, ci sono strumenti di interfaccia utente grafica che possiamo utilizzare per visualizzare i carichi medi di sistema.
Comprensione del Carico Medio di Sistema in Relazione al Numero di CPU
Non possiamo spiegare il carico di sistema o le prestazioni del sistema senza fare luce sull’impatto del numero di core CPU sulle prestazioni.
Multi-processore Vs Multi-core
- Multi-processore – è quando due o più CPU fisiche sono integrate in un singolo sistema informatico.
- Processore multi-core – è una singola CPU fisica che ha almeno due o più core separati (o unità di elaborazione a cui possiamo anche fare riferimento come unità di elaborazione) che lavorano in parallelo. Significa che un dual-core ha 2 unità di elaborazione, un quad-core ha 4 unità di elaborazione e così via.
Inoltre, esiste anche una tecnologia dei processori che è stata introdotta per la prima volta da Intel per migliorare il calcolo parallelo, chiamata hyper threading.
In hyper threading, un singolo core CPU fisico appare come due core CPU logici per un sistema operativo (ma in realtà c’è un singolo componente hardware fisico).
Si noti che un singolo core CPU può eseguire solo un’attività alla volta, quindi tecnologie come multiple CPU/processori, CPU multi-core e hyper-threading sono state sviluppate.
Con più di una CPU, diversi programmi possono essere eseguiti contemporaneamente. Le CPU Intel attuali utilizzano una combinazione di core multipli e tecnologia di hyper-threading.
Per trovare il numero di unità di elaborazione disponibili su un sistema, possiamo utilizzare i comandi nproc o lscpu come segue:
$ nproc 4 OR lscpu
Un altro modo per trovare il numero di unità di elaborazione utilizzando il comando grep come mostrato.
$ grep 'model name' /proc/cpuinfo | wc -l 4
Ora, per comprendere meglio il carico di sistema, faremo alcune ipotesi. Diciamo che abbiamo medie di carico inferiori a:
23:16:49 up 10:49, 5 user, load average: 1.00, 0.40, 3.35
Su un sistema a singolo core questo significherebbe:
- La CPU era completamente (100%) utilizzata in media; 1 processo era in esecuzione sulla CPU (1,00) nell’ultimo minuto.
- La CPU era inattiva per il 60% in media; nessun processo stava aspettando il tempo della CPU (0,40) negli ultimi 5 minuti.
- La CPU era sovraccaricata del 235% in media; 2,35 processi stavano aspettando il tempo della CPU (3,35) negli ultimi 15 minuti.
Su un sistema a doppio core questo significherebbe:
- Una CPU era inattiva al 100% in media, una CPU era in uso; nessun processo stava aspettando il tempo della CPU (1,00) nell’ultimo minuto.
- Le CPU erano inattive per il 160% in media; nessun processo stava aspettando il tempo della CPU (0,40) negli ultimi 5 minuti.
- Le CPU erano sovraccaricate del 135% in media; 1,35 processi stavano aspettando il tempo della CPU (3,35) negli ultimi 15 minuti.
Potrebbe interessarti anche:
- 20 Strumenti da Righe di Comando per Monitorare le Prestazioni di Linux – Parte 1
- 13 Strumenti di Monitoraggio delle Prestazioni di Linux – Parte 2
- Perf- Uno strumento di monitoraggio delle prestazioni e analisi per Linux
- Nmon: Analizza e monitora le prestazioni del sistema Linux
In conclusione, se sei un amministratore di sistema, i carichi di lavoro elevati sono davvero preoccupanti. Quando sono alti, al di sopra del numero di core della CPU, significa una forte domanda per le CPU, e i carichi di lavoro bassi al di sotto del numero di core della CPU ci dicono che le CPU non vengono utilizzate appieno.
Source:
https://www.tecmint.com/understand-linux-load-averages-and-monitor-performance/