Forstå Linux-belastningstal og overvåg Linux-ydeevne


I denne artikel vil vi forklare en af de kritiske Linux-systemadministrationsopgaver - ydelsesovervågning med hensyn til system/CPU-belastning og belastningsgennemsnit.

Før vi går videre, lad os forstå disse to vigtige sætninger i alle Unix-lignende systemer:

  • Systembelastning/CPU-belastning - er en måling af CPU-over- eller underudnyttelse i et Linux-system; antallet af processer, der udføres af CPU'en eller i ventetilstand.
  • Belastningsgennemsnit - er den gennemsnitlige systembelastning beregnet over en given tidsperiode på 1, 5 og 15 minutter.

I Linux menes belastningsgennemsnittet teknisk at være et løbende gennemsnit af processer i den (kernel) udførelseskø, der er mærket som kørende eller uafbrydeligt.

Noter det:

  • Alle, hvis ikke de fleste systemer, der drives af Linux eller andre Unix-lignende systemer, viser muligvis belastningsgennemsnit værdier et sted for en bruger.
  • Et direkte inaktiv Linux-system kan have et belastningsgennemsnit på nul eksklusive tomgangsprocessen.
  • Næsten alle Unix-lignende systemer tæller kun processer i kørende eller ventende tilstand. Men dette er ikke tilfældet med Linux, det inkluderer processer i uafbrydelige søvntilstande; dem, der venter på andre systemressourcer som disk I/O osv.

Sådan overvåges Linux-systembelastningsgennemsnit

Der er adskillige måder til overvågning af systembelastningsgennemsnit, herunder oppetid, der viser, hvor længe systemet har kørt, antal brugere sammen med belastningsgennemsnit:

$ uptime

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

Tallene læses fra venstre mod højre, og output ovenfor betyder, at:

  • gennemsnitsbelastning i løbet af det sidste 1 minut er 1,98
  • gennemsnittet for belastning i løbet af de sidste 5 minutter er 2,15
  • gennemsnitsbelastning i løbet af de sidste 15 minutter er 2,21

Højt belastningsgennemsnit betyder, at et system er overbelastet; mange processer venter på CPU-tid.

Vi afdækker dette i det næste afsnit i forhold til antallet af CPU-kerner. Derudover kan vi lige så godt bruge andre kendte værktøjer såsom blik, der viser en realtidsstatus for et kørende Linux-system plus mange andre værktøjer:

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

Belastningsgennemsnittene vist med disse værktøjer er læse/proc/loadavg-fil, som du kan se ved hjælp af cat-kommandoen som nedenfor:

$ cat /proc/loadavg

2.48 1.69 1.42 5/889 10570

For at overvåge belastningsgennemsnit i grafformat skal du tjekke: ttyload - Viser en farvekodet graf over Linux-gennemsnittet i terminalen

På stationære maskiner er der grafiske brugergrænsefladesværktøjer, som vi kan bruge til at se systembelastningsgennemsnit.

Forståelse af systemets gennemsnitlige belastning i forhold Antal CPU'er

Vi kan umuligt forklare systembelastning eller systemydelse uden at kaste lys over indvirkningen af antallet af CPU-kerner på ydeevnen.

  • Multi-processor - er, hvor to eller flere fysiske CPU'er er integreret i et enkelt computersystem.
  • Multi-core processor - er en enkelt fysisk CPU, der har mindst to eller flere separate kerner (eller hvad vi også kan referere til som behandlingsenheder), der fungerer parallelt. Det betyder, at en dual-core har 2 to processorenheder, en quad-core har 4 processorenheder og så videre.

Derudover er der også en processorteknologi, der først blev introduceret af Intel for at forbedre parallel computing, kaldet hyper threading.

Under hyper threading vises en enkelt fysisk CPU-kerne som to logiske CPU'er til et operativsystem (men i virkeligheden er der en fysisk hardwarekomponent).

Bemærk, at en enkelt CPU-kerne kun kan udføre en opgave ad gangen, så teknologier som flere CPU'er/processorer, multi-core CPU'er og hyper-threading blev bragt til live.

Med mere end en CPU kan flere programmer udføres samtidigt. Nutidens Intel-CPU'er bruger en kombination af både flere kerner og hyper-threading-teknologi.

For at finde antallet af tilgængelige behandlingsenheder på et system kan vi bruge kommandoer nproc eller lscpu som følger:

$ nproc
4

OR
lscpu

En anden måde at finde antallet af behandlingsenheder ved hjælp af grep-kommandoen som vist.

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

4

For at forstå systembelastningen yderligere tager vi et par antagelser. Lad os sige, at vi har belastningsgennemsnit nedenfor:

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

  • CPU'en blev fuldt ud (100%) brugt i gennemsnit; 1 processer kørte på CPU'en (1.00) i løbet af det sidste 1 minut.
  • CPU'en var i gennemsnit 60% inaktiv; ingen processer ventede på CPU-tid (0,40) i løbet af de sidste 5 minutter.
  • CPU'en blev i gennemsnit overbelastet med 235%; 2,35 processer ventede på CPU-tid (3.35) i løbet af de sidste 15 minutter.

  • Den ene CPU var i gennemsnit 100% inaktiv, en CPU blev brugt; ingen processer ventede på CPU-tid (1.00) i løbet af det sidste 1 minut.
  • CPU'erne var i gennemsnit 160% inaktive; ingen processer ventede på CPU-tid. (0,40) i løbet af de sidste 5 minutter.
  • CPU'erne blev i gennemsnit overbelastet med 135%; 1,35 processer ventede på CPU-tid. (3.35) i løbet af de sidste 15 minutter.

Du kan måske også lide:

  1. 20 kommandolinjeværktøjer til overvågning af Linux-ydeevne - del 1
  2. 13 Linux Performance Monitoring Tools - Del 2
  3. Perf - Et performanceovervågnings- og analyseværktøj til Linux
  4. Nmon: Analyser og overvåg Linux-systemydelse

Afslutningsvis, hvis du er systemadministrator, er høje belastningsgennemsnit reelle at bekymre sig om. Når de er høje, over antallet af CPU-kerner, betyder det stor efterspørgsel efter CPU'erne, og gennemsnit for lav belastning under antallet af CPU-kerner fortæller os, at CPU'er er underudnyttet.