Entendre les mitjanes de càrrega de Linux i supervisar el rendiment de Linux


En aquest article, explicarem una de les tasques crítiques d'administració del sistema Linux: la supervisió del rendiment pel que fa a la càrrega del sistema/CPU i les mitjanes de càrrega.

Abans de seguir endavant, entenem aquestes dues frases importants en tots els sistemes semblants a Unix:

  • Càrrega del sistema/Càrrega de CPU: és una mesura de l'ús excessiu o insuficient de la CPU en un sistema Linux; el nombre de processos que s'estan executant per la CPU o en estat d'espera.
  • Càrrega mitjana: és la càrrega mitjana del sistema calculada durant un període de temps determinat d'1, 5 i 15 minuts.

A Linux, tècnicament es creu que la mitjana de càrrega és una mitjana en execució dels processos de la seva cua d'execució (nucli) etiquetada com a en execució o ininterrompuda.

Tingues en compte que:

  • Tots, si no la majoria dels sistemes alimentats per Linux o altres sistemes semblants a Unix, possiblement mostraran els valors mitjans de càrrega en algun lloc per a un usuari.
  • Un sistema Linux totalment inactiu pot tenir una càrrega mitjana de zero, excloent el procés inactiu.
  • Gairebé tots els sistemes semblants a Unix només compten processos en estat d'execució o d'espera. Però aquest no és el cas de Linux, inclou processos en estats de repòs ininterromput; aquells que esperen altres recursos del sistema, com ara E/S de disc, etc.

Com controlar la càrrega mitjana del sistema Linux

Hi ha nombroses maneres de controlar la mitjana de càrrega del sistema, inclosa el temps d'activitat que mostra quant de temps ha estat en funcionament el sistema, el nombre d'usuaris i les mitjanes de càrrega:

$ uptime

07:13:53 up 8 days, 19 min,  1 user,  load average: 1.98, 2.15, 2.21

Els números es llegeixen d'esquerra a dreta i la sortida anterior significa que:

  • la mitjana de càrrega durant l'últim minut és 1,98
  • la mitjana de càrrega dels darrers 5 minuts és de 2,15
  • la mitjana de càrrega dels darrers 15 minuts és de 2,21

Les mitjanes de càrrega altes impliquen que un sistema està sobrecarregat; molts processos estan esperant el temps de la CPU.

Ho descobrirem a la següent secció en relació amb el nombre de nuclis de CPU. A més, també podem utilitzar altres eines conegudes com ara mirades que mostren un estat en temps real d'un sistema Linux en funcionament, a més de moltes altres eines:

$ 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   
....
$ 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 
...

Les mitjanes de càrrega que mostren aquestes eines es llegeix el fitxer /proc/loadavg, que podeu veure amb l'ordre cat com a continuació:

$ cat /proc/loadavg

2.48 1.69 1.42 5/889 10570

Per controlar les mitjanes de càrrega en format de gràfic, consulteu: ttyload: mostra un gràfic codificat per colors de la mitjana de càrrega de Linux a la terminal

A les màquines d'escriptori, hi ha eines d'interfície gràfica d'usuari que podem utilitzar per veure les mitjanes de càrrega del sistema.

Entendre la càrrega mitjana del sistema en relació amb el nombre de CPU

No podem explicar la càrrega del sistema o el rendiment del sistema sense aportar llum sobre l'impacte del nombre de nuclis de CPU en el rendiment.

  • Multiprocessador: és on s'integren dues o més CPU físiques en un sol sistema informàtic.
  • Processador multinucli: és una única CPU física que té almenys dos o més nuclis separats (o el que també podem denominar unitats de processament) que funcionen en paral·lel. Això vol dir que un nucli dual té 2 unitats de processament, un de quatre nuclis té 4 unitats de processament i així successivament.

A més, també hi ha una tecnologia de processador que va ser introduïda per primera vegada per Intel per millorar la informàtica paral·lela, anomenada hiper threading.

Sota l'hiper threading, un únic nucli de CPU físic apareix com a nucli de dues CPU lògiques a un sistema operatiu (però, en realitat, hi ha un component de maquinari físic).

Tingueu en compte que un únic nucli de CPU només pot dur a terme una tasca alhora, per la qual cosa es van donar vida a tecnologies com ara múltiples CPU/processadors, CPU de diversos nuclis i hiper-threading.

Amb més d'una CPU, es poden executar diversos programes simultàniament. Les CPU Intel actuals utilitzen una combinació de múltiples nuclis i tecnologia d'hiper-threading.

Per trobar el nombre d'unitats de processament disponibles en un sistema, podem utilitzar les ordres nproc o lscpu de la següent manera:

$ nproc
4

OR
lscpu

Una altra manera de trobar el nombre d'unitats de processament utilitzant l'ordre grep com es mostra.

$ grep 'model name' /proc/cpuinfo | wc -l

4

Ara, per entendre millor la càrrega del sistema, farem algunes hipòtesis. Suposem que tenim mitjanes de càrrega a continuació:

23:16:49 up  10:49,  5 user,  load average: 1.00, 0.40, 3.35

  • La CPU es va utilitzar completament (100%) de mitjana; S'ha executat 1 procés a la CPU (1.00) durant l'últim minut.
  • La CPU estava inactiva un 60% de mitjana; cap procés no estava esperant el temps de CPU (0,40) durant els darrers 5 minuts.
  • La CPU es va sobrecarregar un 235% de mitjana; 2.35 processos estaven esperant el temps de CPU (3.35) durant els darrers 15 minuts.

  • L'única CPU estava 100% inactiva de mitjana, s'estava utilitzant una; cap procés no estava esperant el temps de CPU (1.00) durant l'últim minut.
  • Les CPU estaven inactius un 160% de mitjana; cap procés esperava el temps de la CPU. (0,40) durant els últims 5 minuts.
  • Les CPU es van sobrecarregar un 135% de mitjana; 1.35 processos estaven esperant el temps de la CPU. (3.35) durant els últims 15 minuts.

Potser també t'agrada:

  1. 20 eines de línia d'ordres per supervisar el rendiment de Linux - Part 1
  2. 13 Eines de control del rendiment de Linux - Part 2
  3. Perf: una eina de seguiment i anàlisi del rendiment per a Linux
  4. Nmon: analitzar i supervisar el rendiment del sistema Linux

En conclusió, si sou un administrador del sistema, les mitjanes de càrrega altes són reals per preocupar-se. Quan són alts, per sobre del nombre de nuclis de CPU, significa una gran demanda de les CPU, i les mitjanes de càrrega baixes per sota del nombre de nuclis de CPU ens diuen que les CPU estan infrautilitzades.