Cum se monitorizează CPU și memoria pe Linux?

Descoperă cum să evaluezi consumul de resurse CPU și memorie, fie pentru un singur proces, fie la nivelul întregului sistem.

În postura de administrator de sistem, te confrunți frecvent cu situații în care o aplicație funcționează lent sau nu mai răspunde din cauza utilizării excesive a CPU, memoriei sau rețelei. Identificarea cauzei este simplă când un singur proces rulează pe server și consumă toate resursele. Însă, într-un mediu cu mai multe servicii active, găsirea vinovatului devine o provocare.

Există numeroase soluții software de monitorizare care oferă această funcționalitate. Totuși, dacă nu dispui de ele sau preferi o abordare bazată pe comenzi, iată câteva opțiuni utile. Toate sunt GRATUITE!

top

Un bun punct de plecare este comanda „top”, care oferă o imagine de ansamblu asupra proceselor active.

Așa cum observi în exemplul de mai jos, „top” prezintă detalii despre consumul de resurse al fiecărui proces. În cazul MySQL, de exemplu, observăm un consum de 11,9% din CPU și 2,5% din memorie.

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

Comanda „top” este preinstalată pe majoritatea distribuțiilor Linux.

Odată ce ai identificat procesul problematic, poți utiliza „top” cu argumente specifice pentru a te concentra doar asupra acestuia. Pentru a monitoriza un proces anume, folosește comanda:

top -p $PID

Următorul exemplu ilustrează utilizarea comenzii 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

Poți utiliza și grep împreună cu „top”. De exemplu, pentru a monitoriza procesele Docker:

[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

Similar cu „top”, „htop” oferă informații mai detaliate, inclusiv calea proceselor și o vizualizare colorată. Acest lucru facilitează identificarea mai rapidă a proceselor.

Este posibil ca „htop” să nu fie preinstalat, dar îl poți instala ușor, urmând instrucțiunile de mai jos.

Instalare htop pe Ubuntu

apt-get install htop

Instalare htop pe CentOS/RHEL 8.x

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

glances

Numele sugerează o privire rapidă asupra utilizării sistemului pe un singur ecran. Procesele active sunt ordonate în funcție de consumul de CPU.

Instalează Glances pe CentOS 8 folosind DNF:

dnf install glances

Pentru CentOS 7, folosește YUM:

yum install glances

atop

Asemănător cu instrumentele anterioare, „atop” are o funcție specială: înregistrarea rezultatelor într-un fișier, pentru a le analiza ulterior. Această funcție este extrem de utilă când identifici tipare de utilizare problematică într-o anumită perioadă. Poți programa înregistrarea folosind crontab, iar apoi să analizezi rezultatele.

Pentru a înregistra într-un fișier:

atop -w nume_fisier

Pentru a reda înregistrarea:

atop -r nume_fisier

Comanda „atop” acceptă numeroase argumente suplimentare (interval, număr de mostre, etc.). Îți recomandăm să consulți pagina de manual.

Dacă ai nevoie doar de monitorizare în timp real, tastează pur și simplu „atop” și vei vedea o interfață similară cu cea de mai jos:

Instalează „atop” folosind:

dnf install atop

ps

Să explorăm comanda „ps”.

Poți folosi „ps” cu PID-ul procesului pentru a afișa utilizarea CPU și memoriei:

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

Rezultatul va fi similar cu următorul:

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

nmon

Acesta este un instrument interactiv de monitorizare din linia de comandă, care afișează informații despre CPU, memorie, discuri, rețea, NFS și memoria virtuală. Pentru a vizualiza procesele principale (sortate după utilizare), tastează „nmon” și apasă tasta ‘t’.

Instalează „nmon” folosind:

dnf install nmon

Monit

Monit este o soluție open-source, cu interfață web și linie de comandă, destinată monitorizării resurselor serverului, a demonilor, fișierelor, directoarelor și sistemelor de fișiere.

Monit oferă și un widget util:

Este un software de monitorizare ușor de utilizat. Merită explorat.

Monitorix

Este un instrument open-source, simplu de utilizat, destinat monitorizării serverelor Linux. Monitorix include un server HTTP încorporat, astfel încât poți analiza utilizarea resurselor direct din browser. Printre rapoartele oferite se numără:

  • Kernel/Temperatură
  • Sistem de fișiere și I/O
  • Trafic rețea
  • Apache/Mail/FTP/Nginx
  • MySQL/Varnish/Memcached

Monitorix oferă și funcții de alertare, astfel încât poți fi notificat când apar probleme. Este o alegere potrivită pentru gestionarea serverelor cloud și monitorizarea proactivă.

Netdata

Netdata oferă monitorizare în timp real a performanței pentru resursele sistemului, aplicații, servere web, baze de date, DNS, email și senzori hardware. Este o soluție open-source, ușor de configurat. Datele sunt colectate, stocate și transmise în flux, pentru o analiză interactivă. Acestea sunt colectate în fiecare secundă, asigurându-se că nu ratezi nimic.

Este o soluție apreciată de mulți lideri din industrie:

Așadar, nu mai sta pe gânduri, preia controlul serverelor tale Linux!

btop

btop este un monitor de resurse interactiv, cu o interfață grafică atractivă, care te ajută să gestionezi serverele Linux.

Poți vizualiza procesele sub forma unui arbore, le poți filtra și gestiona consumul de resurse. btop afișează și un grafic care prezintă utilizarea rețelei.

În plus, poți verifica viteza discului și poți gestiona activitatea I/O.

btop este compatibil cu Linux, FreeBSD și macOS.

Concluzie

Sper că aceste instrumente te vor ajuta să monitorizezi utilizarea serverului în timp real, astfel încât să poți lua deciziile corecte. Dacă ești la început de drum ca administrator de sistem și dorești să te familiarizezi cu aceste tehnologii, îți recomandăm acest curs Udemy.