Hur övervakar jag CPU och minne på Linux?

Vet hur mycket en enskild process eller systemomfattande förbrukar CPU eller minne.

Som sysadmin måste du ofta hantera en incident där applikationen är långsam eller inte svarar på grund av hög CPU/minne/nätverksanvändning. Om servern bara är värd för en process är det lätt att ta reda på när processen förbrukar alla resurser. Föreställ dig dock en delad server där flera tjänster körs och du måste hitta vilken som äter alla resurser.

Det finns många övervakningsprogram som gör detta direkt. Men om du inte har en eller letar efter en kommandobaserad lösning, så är det här. De är alla GRATIS!

topp

Du kanske vill börja med att titta på topp- eller htopresultat för att se processöversikten.

Som du kan se nedan ger det en utmärkt uppfattning om vad alla processer använder. Om du tittar på den första, som är MySQL tar 11,9% av CPU och 2,5% av CPU.

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

Toppen är installerad på nästan all Linux-distribution.

När du har identifierat den misstänkte kanske du vill fokusera på den processen istället för allt som du såg ovan. Du kan fortfarande använda toppkommandot men med några argument.

Låt oss säga att du känner till process-id (PID); du kan använda kommandot nedan.

topp -p $PID

Nedan ett exempel på 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 också använda grep med topp. Nedan ett exempel på hur du kontrollerar Docker-användning.

[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

Liknar toppen men med mer information. Som du kan fick den kommandokolumnen, som är praktisk för att identifiera processvägen. Och den är också färgglad.

htop kanske inte är installerat som standard, men du kan alltid göra det enligt nedan.

Installera htop på Ubuntu

apt-get install htop

Installera 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

blickar

Som namnet säger får du en systemanvändningsvy på en enda skärm. Pågående processer sorteras efter deras CPU-användning.

Du kan installera blickar på CentOS 8 med DNF enligt nedan.

dnf install glances

för CentOS7 kan du använda YUM

yum install glances

ovanpå

En liknande till ovan listade men med en lysande funktion för att spela in utdata i en fil så att du kan se dem senare. Föreställ dig att det finns ett mönster av att ha ett problem vid ett specifikt tidsfönster. Du kan schemalägga att skriva utdata i en fil via crontab eller annat, och senare kan du spela upp.

För att spela in utdata i en fil:

atop -w filename

och för att spela upp:

atop -r filename

Den stöder flera argument som intervall, prover, etc. och jag rekommenderar starkt att du tar en titt på man-sidan.

Om du bara är intresserad av felsökning i realtid, kör bara på toppen och du bör se som nedan.

Du kan installera ovanpå enligt nedan.

dnf install atop

ps

Låt oss kontrollera ps-kommandot nu.

Du kan använda kommandot ps med PID för att skriva ut deras CPU- och minnesanvändning.

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

Utgången ska se ut så här.

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

nmon

Interaktivt kommandoradsövervakningsverktyg för CPU, minne, diskar, nätverk, NFS och virtuellt minne. För att se den översta processen (genom användning), kan du köra nmon och trycka på t-knappen.

Du kan installera nmon enligt nedan.

dnf install nmon

Monit

Monit är en webbaserad och kommandoradslösning med öppen källkod för att övervaka serverresurser, demoner, filer, kataloger, filsystem, etc.

Monit fick också en cool widget.

Dess lätta övervakningsprogramvara. Men det finns mer att utforska här.

Monitorix

Ett lättviktsverktyg med öppen källkod för att övervaka Linux-servern. Monitorix har inbyggd HTTP så att du kan kontrollera användningen och andra saker på webben. Några av de andra användningsrapporterna inkluderar:

  • Kernal/temperatur
  • Filsystem och I/O
  • Nätverkstrafik
  • Apache/Mail/FTP/Nginx
  • MySQL/Lack/Memcached

Monitorix erbjuder även larmkonfiguration så att du kan få meddelanden när saker inte står rätt till. Det kommer att vara ett bra val när du hanterar molnbaserade servrar och letar efter en proaktiv övervakningslösning.

Netdata

Netdata är en prestandaövervakning i realtid för systemresurser, applikationer, webbservrar, databaser, DNS, e-post, hårdvarusensorer och mycket mer. Det är öppen källkod och det är lätt att komma igång. All data samlas in, lagras och streamas för att du ska kunna visualisera interaktivt. Data samlas in varje sekund, så att du aldrig missar något.

Älskad av många branschledare.

Så vad du väntar på, försök ta kontroll över dina Linux-servrar.

btop

btop är en praktisk resursmonitor helt interaktiv med ett vackert användargränssnitt som hjälper dig att hantera Linux-servrarna.

Du kan enkelt visualisera processerna i en trädvy, filtrera från processlistan och hantera resurssvinen. btop levereras också med en automatisk skalningsgraf som visar nätverksanvändning.

Dessutom kan du också kontrollera diskhastighet och slutföra I/O-aktivitet.

Det finns mer i detta som du kan uppleva på Linux, FreeBSD och macOS.

Slutsats

Jag hoppas att verktygen ovan hjälper dig att visualisera serveranvändningen i realtid så att du kan vidta nödvändiga åtgärder. Om du precis har börjat som systemadministratör och vill få praktisk utbildning, kolla in det här Udemy kurs.