Comprendi i carichi di lavoro di Linux e monitora le prestazioni di Linux

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
Display Running Linux Processes
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
Glances – Linux System Monitoring Tool
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:

  1. 20 Strumenti da Righe di Comando per Monitorare le Prestazioni di Linux – Parte 1
  2. 13 Strumenti di Monitoraggio delle Prestazioni di Linux – Parte 2
  3. Perf- Uno strumento di monitoraggio delle prestazioni e analisi per Linux
  4. 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/