Ricerca nel sito web

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:

  1. 20 Strumenti da riga di comando per monitorare le prestazioni di Linux – Parte 1
  2. 13 Strumenti di monitoraggio delle prestazioni Linux – Parte 2
  3. Perf: uno strumento di monitoraggio e analisi delle prestazioni per Linux
  4. 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.