Comprendere le medie di carico di Linux e monitorare le prestazioni di Linux
In questo articolo spiegheremo una delle attività critiche di amministrazione del sistema Linux: il monitoraggio delle prestazioni per quanto riguarda il carico del sistema/CPU e le medie di carico.
Prima di proseguire, comprendiamo queste due frasi importanti in tutti i sistemi simili a Unix:
- Carico del sistema/Carico della CPU: è una misurazione del sovrautilizzo o del sottoutilizzo della CPU in un sistema Linux; il numero di processi che vengono eseguiti dalla CPU o in stato di attesa.
- Carico medio – è il carico medio del sistema calcolato su un dato periodo di tempo di 1, 5 e 15 minuti.
In Linux, tecnicamente si ritiene che il carico medio sia una media corrente dei processi nella coda di esecuzione (kernel) contrassegnati come in esecuzione o senza interruzioni.
Nota che:
- Tutti, se non la maggior parte, dei sistemi basati su Linux o altri sistemi simili a Unix mostreranno probabilmente i valori medi del carico da qualche parte per un utente.
- Un sistema Linux completamente inattivo può avere un carico medio pari a zero, escluso il processo inattivo.
- Quasi tutti i sistemi simili a Unix contano solo i processi negli stati di esecuzione o di attesa. Ma questo non è il caso di Linux, che include processi in stati di sospensione ininterrotta; quelli in attesa di altre risorse di sistema come I/O del disco ecc.
Come monitorare il carico medio del sistema Linux
Esistono numerosi modi per monitorare il carico medio del sistema, incluso il tempo di attività che mostra da quanto tempo il sistema è in funzione, 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:
- il carico medio nell'ultimo 1 minuto è 1,98
- il carico medio negli ultimi 5 minuti è 2,15
- il carico medio negli ultimi 15 minuti è 2,21
Medie di carico elevate implicano che un sistema è sovraccarico; molti processi attendono il tempo della CPU.
Lo scopriremo nella prossima sezione in relazione al numero di core della CPU. Inoltre, possiamo anche utilizzare altri strumenti ben noti come top e sguardi che mostrano lo stato in tempo reale di un sistema Linux in esecuzione, oltre a molti altri strumenti:
Comando superiore
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 Sguardi
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
...
Il carico medio mostrato da questi strumenti viene letto nel file /proc/loadavg, che puoi visualizzare utilizzando il comando cat come di seguito:
cat /proc/loadavg
2.48 1.69 1.42 5/889 10570
Per monitorare le medie di carico in formato grafico, controlla: ttyload – Mostra un grafico con codice colore della media del carico di Linux nel terminale
Sui computer desktop sono disponibili strumenti di interfaccia utente grafica che possiamo utilizzare per visualizzare le medie di carico del sistema.
Comprensione del carico medio del sistema in relazione al numero di CPU
Non possiamo spiegare il carico o le prestazioni del sistema senza far luce sull'impatto del numero di core della CPU sulle prestazioni.
Multiprocessore contro multicore
- Multiprocessore: è il caso in cui due o più CPU fisiche sono integrate in un unico sistema informatico.
- Processore multi-core: è una singola CPU fisica che ha almeno due o più core separati (o ciò che possiamo anche chiamare unità di elaborazione) che funzionano in parallelo. Ciò significa che un dual-core ha 2 unità di elaborazione doppie, un quad-core ha 4 unità di elaborazione e così via.
Inoltre, esiste anche una tecnologia di processore introdotta per la prima volta da Intel per migliorare il calcolo parallelo, denominata hyper threading.
Con l'hyper threading, un singolo core fisico della CPU appare come due core logici della CPU per un sistema operativo (ma in realtà esiste un componente hardware fisico).
Si noti che un singolo core della CPU può eseguire solo un'attività alla volta, quindi sono state create tecnologie come CPU/processori multipli, CPU multi-core e hyper-threading.
Con più CPU è possibile eseguire più programmi contemporaneamente. Le attuali CPU Intel utilizzano una combinazione di core multipli e tecnologia 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 del sistema, faremo alcune ipotesi. Diciamo che abbiamo le medie di carico di seguito:
23:16:49 up 10:49, 5 user, load average: 1.00, 0.40, 3.35
Su un sistema single core ciò significherebbe:
- La CPU è stata utilizzata in media completamente (100%); 1 processo era in esecuzione sulla CPU (1.00) nell'ultimo minuto.
- La CPU era inattiva in media al 60%; nessun processo era in attesa del tempo CPU (0,40) negli ultimi 5 minuti.
- La CPU è stata sovraccaricata in media del 235%; 2,35 processi erano in attesa del tempo CPU (3,35) negli ultimi 15 minuti.
Su un sistema dual-core ciò significherebbe:
- Una CPU era in media al 100% inattiva, una CPU era in uso; nessun processo era in attesa del tempo CPU (1.00) nell'ultimo minuto.
- Le CPU erano inattive in media per il 160%; nessun processo aspettava il tempo della CPU. (0,40) negli ultimi 5 minuti.
- Le CPU erano sovraccaricate in media del 135%; 1.35 processi erano in attesa del tempo della CPU. (3.35) negli ultimi 15 minuti.
Potrebbe piacerti anche:
- 20 Strumenti da riga di comando per monitorare le prestazioni di Linux – Parte 1
- 13 Strumenti di monitoraggio delle prestazioni Linux – Parte 2
- Perf: uno strumento di monitoraggio e analisi delle prestazioni per Linux
- Nmon: analizza e monitora le prestazioni del sistema Linux
In conclusione, se sei un amministratore di sistema, è davvero necessario preoccuparsi di carichi medi elevati. Quando sono elevati, al di sopra del numero di core della CPU, significa una domanda elevata per le CPU, mentre medie di carico basse al di sotto del numero di core della CPU ci indicano che le CPU sono sottoutilizzate.