Jak monitorować procesor i pamięć w systemie Linux?

Photo of author

By maciekx

Zastanawiasz się, jak sprawdzić obciążenie procesora lub zużycie pamięci przez pojedynczy proces lub cały system? Ten artykuł jest dla Ciebie.

W pracy administratora systemów często pojawiają się sytuacje, gdy aplikacja działa wolno, lub przestaje odpowiadać, z powodu nadmiernego wykorzystania zasobów, takich jak procesor, pamięć operacyjna czy łącze sieciowe. Gdy serwer wykonuje tylko jedno zadanie, łatwo zidentyfikować przyczynę problemu. Sytuacja komplikuje się, gdy na serwerze współdzielonym działa wiele usług. Wtedy potrzebujesz narzędzia, które pozwoli Ci ustalić, który proces „zjada” zasoby.

Na rynku dostępnych jest wiele gotowych rozwiązań do monitorowania. Jednak, jeśli nie masz ich pod ręką, lub wolisz polecenia w terminalu, ten artykuł jest dla Ciebie. Co ważne, wszystkie opisane narzędzia są dostępne za darmo!

Top

Punktem startowym może być polecenie `top` lub `htop`, które prezentują aktualny stan wszystkich procesów.

Jak widać na przykładzie poniżej, uzyskujemy szczegółowy obraz tego, jak poszczególne procesy obciążają system. Na pierwszym miejscu znajduje się proces MySQL, który w tym momencie zużywa 11,9% procesora oraz 2,5% pamięci RAM.

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

Polecenie `top` jest dostępne w większości dystrybucji systemu Linux.

Po zidentyfikowaniu podejrzanego procesu, warto skupić się na nim. Możesz to zrobić, używając polecenia `top` z opcją `-p` i numerem PID.

Na przykład, jeśli znasz identyfikator procesu (PID), możesz użyć polecenia:

`top -p $PID`

Poniżej przykład użycia `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

Możesz również użyć `grep` w połączeniu z `top`. Poniżej przykład, jak sprawdzić wykorzystanie zasobów przez procesy związane z Dockerem:

[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

Polecenie `htop` jest podobne do `top`, ale oferuje więcej szczegółów. Dodatkowo, `htop` wyświetla kolumnę z pełną ścieżką procesu, co ułatwia jego identyfikację. Interfejs `htop` jest również bardziej przyjazny dla oka, dzięki zastosowaniu kolorów.

`htop` nie jest zazwyczaj instalowany domyślnie, ale łatwo można go zainstalować, używając poniższych poleceń:

Instalacja htop w systemie Ubuntu

apt-get install htop

Instalacja htop w systemie CentOS/RHEL 8.x

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

glances

Jak sama nazwa wskazuje, `glances` oferuje „rzut oka” na wykorzystanie systemu na jednym ekranie. Procesy są sortowane na podstawie zużycia procesora.

Aby zainstalować `glances` w systemie CentOS 8, użyj poniższego polecenia:

dnf install glances

W systemie CentOS 7, użyj polecenia:

yum install glances

atop

Narzędzie `atop` działa podobnie do opisanych wcześniej, ale oferuje bardzo przydatną funkcję nagrywania danych do pliku, co umożliwia ich późniejsze przeanalizowanie. Wyobraź sobie sytuację, gdy problem pojawia się cyklicznie w określonych godzinach. Dzięki `atop` możesz zaplanować zapis wyjścia do pliku (na przykład za pomocą crontab) i później prześledzić historię obciążenia systemu.

Aby zapisać dane wyjściowe do pliku, użyj polecenia:

atop -w filename

Aby odtworzyć zapisane dane, użyj polecenia:

atop -r filename

`atop` obsługuje wiele opcji, takich jak interwał zapisu, ilość próbek, itp. Zachęcamy do zapoznania się z dokumentacją.

Jeśli interesuje Cię bieżące monitorowanie, po prostu uruchom `atop` i zobaczysz podobny widok:

Aby zainstalować `atop`, użyj:

dnf install atop

ps

Teraz przyjrzymy się poleceniu `ps`.

Używając `ps` z numerem PID, możesz wyświetlić informacje o zużyciu procesora i pamięci przez konkretny proces:

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

Wynik powinien wyglądać podobnie do tego:

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

nmon

`nmon` to interaktywne narzędzie do monitorowania zasobów systemu w trybie tekstowym. Umożliwia śledzenie zużycia procesora, pamięci RAM, dysków, sieci, systemu plików NFS i pamięci wirtualnej. Aby wyświetlić procesy posortowane według zużycia, uruchom `nmon` i naciśnij klawisz `t`.

Aby zainstalować `nmon`, użyj polecenia:

dnf install nmon

Monit

Monit to otwarte oprogramowanie do monitorowania serwerów, demonów, plików, katalogów, systemów plików itp. Posiada interfejs webowy i linię komend.

Monit oferuje również widżet:

Jest to lekkie narzędzie do monitorowania, które warto poznać bliżej.

Monitorix

Monitorix to kolejne lekkie, otwarte narzędzie do monitorowania systemów Linux. Monitorix posiada wbudowany serwer HTTP, dzięki czemu możesz sprawdzać różne parametry przez przeglądarkę internetową. Monitorix pozwala na śledzenie takich parametrów jak:

  • Temperatura procesora
  • System plików i operacje wejścia/wyjścia
  • Ruch sieciowy
  • Statystyki Apache/Poczty/FTP/Nginx
  • Statystyki MySQL/Varnish/Memcached

Monitorix umożliwia także konfigurację alertów, dzięki czemu możesz otrzymywać powiadomienia, gdy coś nie działa prawidłowo. Jest to dobre rozwiązanie, jeśli zarządzasz serwerami w chmurze i szukasz narzędzia do proaktywnego monitorowania.

Netdata

Netdata to otwarte oprogramowanie do monitorowania wydajności w czasie rzeczywistym. Pozwala na śledzenie zasobów systemowych, aplikacji, serwerów WWW, baz danych, DNS, poczty, czujników sprzętowych i wielu innych. Netdata zbiera dane co sekundę i przedstawia je w formie interaktywnych wizualizacji.

Netdata jest ceniona przez wielu specjalistów z branży.

Nie czekaj, zacznij kontrolować swoje serwery Linux!

btop

btop to interaktywny monitor zasobów z estetycznym interfejsem, który pomaga zarządzać serwerami Linux.

Dzięki `btop` możesz łatwo wizualizować procesy w formie drzewa, filtrować listę procesów i zarządzać procesami pochłaniającymi zasoby. `btop` oferuje także wykresy automatycznego skalowania, pokazujące zużycie sieci.

Możesz również sprawdzić szybkość dysku i aktywność wejścia/wyjścia.

`btop` działa w systemach Linux, FreeBSD i macOS.

Podsumowanie

Mamy nadzieję, że opisane narzędzia pomogą Ci monitorować wykorzystanie zasobów serwera w czasie rzeczywistym, dzięki czemu będziesz mógł podjąć właściwe działania. Jeśli dopiero zaczynasz przygodę z administracją systemami i chcesz zdobyć praktyczną wiedzę, sprawdź ten Kurs Udemy.


newsblog.pl