Overvåk CPU og minnebruk på Linux: 7 effektive verktøy!

Det er viktig å vite hvor mye datakraft (CPU) og minne en enkelt prosess eller et helt system bruker.

Som systemadministrator kan du ofte oppleve situasjoner der en applikasjon er treg eller ikke reagerer i det hele tatt. Dette skyldes gjerne høy bruk av prosessor, minne eller nettverk. Dersom serveren kun kjører én prosess, er det enkelt å se om denne prosessen bruker alle ressursene. Men hva om serveren deler ressurser mellom flere tjenester? Da må man finne ut hvilken tjeneste som sluker alle ressursene.

Det finnes mange overvåkingsverktøy som kan hjelpe deg med dette. Men hvis du ikke har et slikt verktøy, eller foretrekker kommandobaserte løsninger, så har du kommet til rett sted. Og det beste av alt, de er gratis!

top

Et godt sted å starte er å bruke kommandoen «top» eller «htop» for å få en oversikt over prosessene som kjører.

Som vist nedenfor gir dette en utmerket oversikt over ressursbruken til de forskjellige prosessene. Her ser vi at den første prosessen, MySQL, bruker 11,9% av prosessorkraften og 2,5% av minnet.

top - 11:57:33 up 0 min,  1 user,  load average: 3.69, 0.96, 0.32
Tasks: 165 total,   2 running, 113 sleeping,   0 stopped,   0 zombie
%Cpu(s): 21.0 us,  5.5 sy,  0.0 ni, 70.5 id,  1.7 wa,  0.0 hi,  1.3 si,  0.0 st
KiB Mem :  7637308 total,  5802888 free,   849512 used,   984908 buff/cache
KiB Swap:        0 total,        0 free,        0 used.  6495648 avail Mem 

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND                                                                                                        
 1986 netdata   20   0 1738856 191560  22948 S  11.6  2.5   0:02.30 mysqld                                                                                                         
 3021 www-data  20   0  255288  78420  55484 S   6.6  1.0   0:01.55 php-fpm                                                                                                        
 3138 www-data  20   0  253096  79780  59228 S   6.6  1.0   0:00.92 php-fpm                                                                                                        
 3153 www-data  20   0  255116  79088  56472 S   5.0  1.0   0:00.70 php-fpm                                                                                                        
 3037 www-data  20   0  257200  81088  56216 S   4.3  1.1   0:01.50 php-fpm                                                                                                        
 3048 www-data  20   0  257088  78740  55380 S   4.3  1.0   0:01.46 php-fpm                                                                                                        
 3054 www-data  20   0  254160  72168  52108 S   3.7  0.9   0:01.32 php-fpm                                                                                                        
 3135 www-data  20   0  255084  75912  54836 S   3.7  1.0   0:00.91 php-fpm                                                                                                        
 3051 www-data  20   0  254096  73804  51964 S   3.0  1.0   0:01.38 php-fpm                                                                                                        
 2962 www-data  20   0   45280   7284   3488 R   2.0  0.1   0:00.22 openresty                                                                                                      
 1062 netdata   20   0  338748  76144   6720 S   1.0  1.0   0:01.31 netdata                                                                                                        
 1702 netdata   20   0   21852   4232   2352 S   1.0  0.1   0:00.34 apps.plugin                                                                                                    
 1729 netdata   20   0   18636   3280   2764 S   0.7  0.0   0:00.05 bash                                                                                                           
 1980 netdata   20   0   62008  12896   5796 S   0.7  0.2   0:00.14 redis-server                                                                                                   
   11 root      20   0       0      0      0 I   0.3  0.0   0:00.14 rcu_sched                                                                                                      
 1007 root      20   0 1347424  74524  38872 S   0.3  1.0   0:00.92 dockerd                                                                                                        
 1857 root      20   0   10600   5564   4276 S   0.3  0.1   0:00.03 containerd-shim                                                                                                
 2045 root      20   0    9948   6028   5016 S   0.3  0.1   0:00.14 forego                                                                                                         
 2934 root      20   0   13616   8760   5928 S   0.3  0.1   0:00.07 docker-gen                                                                                                     
 2966 systemd+  20   0   25784   7924   2340 S   0.3  0.1   0:00.06 nginx

Kommandoen «top» er installert på de fleste Linux-distribusjoner.

Når du har identifisert den mistenkte prosessen, kan det være lurt å fokusere på den i stedet for alle de andre prosessene. Dette kan du gjøre ved å bruke «top»-kommandoen med et tilleggsargument.

Hvis du kjenner prosess-ID (PID), kan du bruke følgende kommando:

top -p $PID

Her er et eksempel på bruk av top -p 3102:

top - 11:59:56 up 3 min,  1 user,  load average: 0.72, 0.70, 0.31
Tasks:   1 total,   0 running,   1 sleeping,   0 stopped,   0 zombie
%Cpu(s):  7.1 us,  2.9 sy,  0.0 ni, 89.1 id,  0.3 wa,  0.0 hi,  0.7 si,  0.0 st
KiB Mem :  7637308 total,  5802024 free,   783672 used,  1051612 buff/cache
KiB Swap:        0 total,        0 free,        0 used.  6555636 avail Mem 

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND                                                                                                        
 3102 www-data  20   0  329500  82376  60640 S   0.0  1.1   0:03.35 php-fpm

Du kan også bruke grep sammen med top. Nedenfor er et eksempel på hvordan man kan overvåke docker-relaterte prosesser:

[email protected]:~# top | grep docker
 1007 root      20   0 1347424  74524  38872 S   0.3  1.0   0:01.38 dockerd                                                                                                        
 2934 root      20   0   14676   9652   5928 S   0.3  0.1   0:00.54 docker-gen                                                                                                     
 1007 root      20   0 1347424  74524  38872 S   0.3  1.0   0:01.39 dockerd                                                                                                        
 1007 root      20   0 1347424  74524  38872 S   1.0  1.0   0:01.42 dockerd                                                                                                        
 2934 root      20   0   14740   9652   5928 S   0.3  0.1   0:00.55 docker-gen                                                                                                     
 2934 root      20   0   14740   9652   5928 S   0.3  0.1   0:00.56 docker-gen

htop

«htop» ligner på «top», men gir mer informasjon. Den viser blant annet kommandoen som er kjørt, noe som kan være nyttig for å identifisere prosessen. I tillegg er den fargerik og mer brukervennlig.

«htop» er kanskje ikke installert som standard, men kan enkelt installeres slik som vist nedenfor:

Installer htop på Ubuntu

apt-get install htop

Installer htop på CentOS/RHEL 8.x

dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm
dnf update
dnf install htop

glances

Som navnet antyder, gir «glances» en rask oversikt over systemets ressurser på én skjerm. De aktive prosessene sorteres etter CPU-bruk.

Du kan installere «glances» på CentOS 8 med DNF som vist nedenfor.

dnf install glances

For CentOS 7 kan du bruke YUM:

yum install glances

atop

«atop» er et annet verktøy som ligner de ovennevnte. Det som gjør «atop» spesielt, er at det kan lagre utdata til en fil, slik at du kan se på dataene senere. Dette er nyttig hvis du opplever problemer i et bestemt tidsvindu. Du kan planlegge at utdata skal lagres i en fil ved hjelp av crontab eller lignende, og deretter se på dataene når det passer deg.

Slik lagrer du utdata til en fil:

atop -w filnavn

Og slik spiller du av:

atop -r filnavn

«atop» støtter mange argumenter, som intervall og antall prøver, så det anbefales å sjekke manualsidene for mer informasjon.

Hvis du bare ønsker å feilsøke i sanntid, kan du bare kjøre «atop» og se utdataene som vises nedenfor.

Du kan installere «atop» slik:

dnf install atop

ps

La oss se på «ps»-kommandoen.

Du kan bruke «ps»-kommandoen med PID for å vise CPU- og minnebruk for en gitt prosess:

ps -p $PID -o %cpu,%mem

Utdataene vil se omtrent slik ut:

[email protected]:~# ps -p 1048 -o %cpu,%mem
%CPU %MEM
 0.2  3.0
[email protected]:~#

nmon

«nmon» er et interaktivt kommandolinjeverktøy for å overvåke CPU, minne, disk, nettverk, NFS og virtuelt minne. For å vise den prosessen som bruker mest ressurser, kan du kjøre «nmon» og trykke på «t»-tasten.

Du kan installere «nmon» slik:

dnf install nmon

Monit

Monit er en nettbasert og kommandolinjebasert åpen kildekodeløsning for å overvåke serverressurser, demoner, filer, mapper, filsystemer og mer.

Monit har også en fin widget.

Dette er en lett overvåkingsprogramvare, men det er mye å utforske.

Monitorix

«Monitorix» er et lett åpen kildekode-verktøy for å overvåke Linux-servere. Monitorix har en innebygd HTTP-server, slik at du kan sjekke bruken og annen informasjon via nettleseren. Noen av de andre rapportene som er tilgjengelige er:

  • Kjerne/temperatur
  • Filsystem og I/O
  • Nettverkstrafikk
  • Apache/Mail/FTP/Nginx
  • MySQL/Lakk/Memcached

«Monitorix» gir også varslingsfunksjonalitet slik at du kan bli varslet dersom noe ikke er som det skal. Dette verktøyet passer bra for deg som administrerer skybaserte servere og leter etter en proaktiv overvåkingsløsning.

Netdata

Netdata er et verktøy for sanntidsovervåking av systemressurser, applikasjoner, webservere, databaser, DNS, e-post, maskinvaresensorer og mye mer. Det er åpen kildekode og enkelt å komme i gang med. Alle data samles inn, lagres og strømmes slik at du kan visualisere det interaktivt. Data samles inn hvert sekund, så du går ikke glipp av noe.

Verktøyet er populært blant mange i bransjen.

Så hva venter du på? Ta kontroll over Linux-serverne dine!

btop

btop er en ressursmonitor som er fullstendig interaktiv med et vakkert brukergrensesnitt som hjelper deg med å administrere Linux-servere.

Du kan enkelt visualisere prosesser i en trevisning, filtrere prosesslisten og administrere prosessene som bruker mest ressurser. «btop» viser også automatisk en graf over nettverksbruken.

I tillegg kan du sjekke disklese- og skrivehastighet, samt fullføre I/O-aktivitet.

Det er mer å utforske, og «btop» fungerer på Linux, FreeBSD og macOS.

Konklusjon

Jeg håper verktøyene nevnt ovenfor hjelper deg med å overvåke serverbruken i sanntid, slik at du kan iverksette nødvendige tiltak. Hvis du er ny som systemadministrator og ønsker mer praktisk opplæring, kan du sjekke ut dette Udemy-kurset.