Како надгледати ЦПУ и меморију на Линуку?

Otkrijte kako pojedinačni procesi ili sistemi troše CPU resurse ili memoriju.

Kao sistem administrator, često se suočavate sa situacijama kada je aplikacija spora ili ne reaguje zbog prekomerne upotrebe CPU-a, memorije ili mreže. Ako server hostuje samo jedan proces, lako je uočiti kada taj proces iscrpljuje resurse. Međutim, zamislite deljeni server na kojem radi više servisa, a vi treba da identifikujete koji od njih troši najviše resursa.

Postoji mnogo softvera za nadzor koji ovo rešava automatski. Ali, ako ga nemate ili želite rešenje zasnovano na komandnoj liniji, evo nekoliko besplatnih opcija!

Top

Možete početi pregledom izlaza komande `top` ili `htop` kako biste dobili opšti pregled procesa.

Kao što možete videti u nastavku, komanda daje jasan uvid u to kako svi procesi koriste resurse. Na primer, MySQL zauzima 11.9% CPU-a i 2.5% memorije.

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
 

Komanda `top` je već instalirana na skoro svim Linux distribucijama.

Kada identifikujete sumnjiv proces, možda ćete želeti da se fokusirate samo na njega umesto na sve procese. I dalje možete koristiti `top`, ali sa dodatnim argumentom.

Na primer, ako znate ID procesa (PID), koristite sledeću komandu:

`top -p $PID`

Primer sa PID-om 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
  

Takođe možete koristiti `grep` sa `top`. Primer za pregled procesa vezanih za 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

Slično komandi `top`, ali sa više informacija. `htop` prikazuje kolonu sa komandama, što je zgodno za identifikaciju putanje procesa, a takođe je i šaren.

`htop` možda nije podrazumevano instaliran, ali ga možete lako instalirati na sledeći način:

Instalacija Htop-a na Ubuntu

apt-get install htop
  

Instalacija Htop-a na CentOS/RHEL 8.x

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

Glances

Kao što ime sugeriše, dobijate pregled korišćenja sistema na jednom ekranu. Pokrenuti procesi su sortirani po potrošnji CPU-a.

Možete instalirati `glances` na CentOS 8 koristeći `dnf`:

dnf install glances
  

Za CentOS 7, koristite `yum`:

yum install glances
  

Atop

Slično kao gore navedeno, ali sa sjajnom funkcijom snimanja izlaza u datoteku, kako biste je kasnije mogli pregledati. Zamislite situaciju da imate problem u određenom vremenskom intervalu. Možete planirati da upišete izlaz u datoteku pomoću `crontab`-a ili sličnog, a kasnije ga reprodukovati.

Da biste snimili izlaz u datoteku:

atop -w filename
  

A za reprodukciju:

atop -r filename
  

Podržava brojne argumente kao što su interval, uzorci, itd., i preporučuje se da pogledate man stranicu.

Ako vas zanima samo rešavanje problema u realnom vremenu, pokrenite `atop` i dobićete sličan prikaz kao dole:

Možete instalirati `atop` na sledeći način:

dnf install atop
  

Ps

Hajde sada da pogledamo komandu `ps`.

Možete koristiti `ps` sa PID-om da prikažete potrošnju CPU-a i memorije.

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

Izlaz bi trebalo da izgleda ovako:

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

Nmon

Interaktivni alat za nadgledanje komandne linije za CPU, memoriju, diskove, mrežu, NFS i korišćenje virtuelne memorije. Da biste videli proces koji najviše koristi resurse, možete pokrenuti `nmon` i pritisnuti taster `t`.

Možete instalirati `nmon` ovako:

dnf install nmon
  

Monit

Monit je rešenje otvorenog koda zasnovano na webu i komandnoj liniji za nadgledanje resursa servera, demona, fajlova, direktorijuma, sistema datoteka itd.

Monit takođe ima i zanimljiv widget:

Ovo je lagan softver za nadzor, ali ima još toga za istraživanje.

Monitorix

Lagan alat otvorenog koda za nadgledanje Linux servera. Monitorix ima ugrađen HTTP server, tako da možete proveriti korišćenje i druge parametre putem web interfejsa. Neki od ostalih izveštaja uključuju:

  • Kernel/temperatura
  • Sistem datoteka i I/O
  • Mrežni saobraćaj
  • Apache/Mail/FTP/Nginx
  • MySQL/Varnish/Memcached

Monitorix takođe nudi konfiguraciju upozorenja, tako da možete biti obavešteni kada nešto nije u redu. To je dobar izbor kada upravljate serverima u oblaku i tražite proaktivno rešenje za nadzor.

Netdata

Netdata je alat za praćenje performansi u realnom vremenu za sistemske resurse, aplikacije, web servere, baze podataka, DNS, mail, hardverske senzore i još mnogo toga. Otvorenog je koda i jednostavan za korišćenje. Svi podaci se prikupljaju, čuvaju i emituju kako biste ih mogli interaktivno vizualizovati. Podaci se prikupljaju svake sekunde, tako da nikada ništa ne propustite.

Koristi ga veliki broj lidera u industriji.

Dakle, šta čekate? Preuzmite kontrolu nad svojim Linux serverima.

Btop

Btop je koristan monitor resursa, potpuno interaktivan sa lepim korisničkim interfejsom koji vam pomaže u upravljanju Linux serverima.

Možete lako vizualizovati procese u prikazu stabla, filtrirati procese sa liste i upravljati resursima. `btop` dolazi sa automatskim skaliranjem grafova koji prikazuje korišćenje mreže.

Osim toga, možete proveriti brzinu diskova i kompletnu I/O aktivnost.

Postoji još mnogo toga što možete iskusiti na Linux-u, FreeBSD-u i macOS-u.

Zaključak

Nadam se da će vam gornji alati pomoći da vizualizujete potrošnju servera u realnom vremenu kako biste mogli da preduzmete neophodne akcije. Ako ste početnik kao sistemski administrator i želite da steknete praktičnu obuku, pogledajte ovaj Udemy kurs.