Jak monitorovat CPU a paměť v Linuxu?

Zjistěte, jak efektivně monitorovat spotřebu CPU a paměti jednotlivých procesů i celého systému.

Správci systémů se často setkávají se situacemi, kdy aplikace zpomalí nebo přestane reagovat kvůli nadměrnému zatížení procesoru, paměti nebo sítě. Pokud server běží pouze s jedním procesem, je snadné odhalit viníka. Nicméně, v prostředí sdíleného serveru, kde současně funguje více služeb, je identifikace procesu s vysokou spotřebou zdrojů náročnější.

Existuje řada monitorovacích nástrojů, které poskytují přehled o využití systému. Pokud však preferujete řešení založená na příkazovém řádku, zde naleznete několik bezplatných možností.

Příkaz ‚top‘

Začněte s příkazem ‚top‘ nebo ‚htop‘, abyste získali okamžitý přehled o běžících procesech a jejich využití systémových zdrojů.

Níže vidíte ukázkový výstup příkazu ‚top‘, který ukazuje využití CPU a paměti jednotlivými procesy. Například, proces MySQL, uvedený jako první, aktuálně využívá 11,9 % procesoru a 2,5 % paměti 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

Příkaz ‚top‘ je součástí téměř všech distribucí Linuxu.

Pokud již máte podezření na konkrétní proces, můžete se zaměřit pouze na něj. Použijte příkaz ‚top‘ s parametrem -p a identifikátorem procesu (PID).

Příklad:
top -p $PID

Zde je ukázka použití ‚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

Dále, můžete kombinovat ‚top‘ s příkazem ‚grep‘ pro filtrování výstupu. Například, pro zobrazení procesů souvisejících s 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

Příkaz ‚htop‘

‚htop‘ je vylepšená verze ‚top‘ s více informacemi a barevným výstupem. Navíc, zobrazuje cestu k procesu, což usnadňuje jeho identifikaci.

‚htop‘ nemusí být standardně nainstalován. Instalaci na Ubuntu provedete následovně:

Instalace ‚htop‘ na Ubuntu

apt-get install htop

Instalace ‚htop‘ na CentOS/RHEL 8.x

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

Příkaz ‚glances‘

Příkaz ‚glances‘ poskytuje komplexní přehled o využití systému na jedné obrazovce. Běžící procesy jsou seřazeny podle vytížení CPU.

Instalace ‚glances‘ na CentOS 8:

dnf install glances

Instalace ‚glances‘ na CentOS 7:

yum install glances

Příkaz ‚atop‘

Podobný ‚top‘, ale s možností zaznamenávat výstup do souboru pro pozdější analýzu. To je užitečné pro sledování vzorců v časových intervalech. Například, pokud se problém opakuje v určitou dobu, můžete si nastavit plánované ukládání dat pro pozdější vyhodnocení.

Pro záznam výstupu do souboru:

atop -w filename

Pro přehrávání uložených dat:

atop -r filename

Podporuje různé argumenty, jako intervaly a vzorkování. Doporučuje se prostudovat manuálovou stránku.

Pro monitorování v reálném čase postačí spustit ‚atop‘:

Instalace ‚atop‘ je možná pomocí následujícího příkazu:

dnf install atop

Příkaz ‚ps‘

Nyní se podíváme na příkaz ‚ps‘.

S parametrem -p a identifikátorem PID získáte informace o vytížení CPU a paměti konkrétního procesu:

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

Výstup může vypadat například takto:

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

Příkaz ‚nmon‘

Interaktivní nástroj pro monitorování CPU, paměti, disků, sítě, NFS a virtuální paměti. Pro zobrazení hlavních procesů (podle využití) spustťe ‚nmon‘ a stiskněte klávesu ‚t‘.

Instalace ‚nmon‘:

dnf install nmon

Monit

Monit je webové a příkazové řešení pro monitorování systémových prostředků, démonů, souborů, adresářů, souborových systémů atd.

Monit nabízí i vizuálně atraktivní widget.

Je to lehký monitorovací software. Pro více informací doporučujeme jeho prozkoumání.

Monitorix

Lehký open-source nástroj pro monitorování linuxových serverů. Monitorix má vestavěný webový server pro zobrazení statistik využití a dalších údajů. Monitoruje:

  • Jádro/teplotu
  • Souborový systém a I/O
  • Síťový provoz
  • Apache/Mail/FTP/Nginx
  • MySQL/Varnish/Memcached

Monitorix umožňuje nastavení upozornění, což je ideální pro cloudové servery, kde je prioritou proaktivní monitoring.

Netdata

Netdata je nástroj pro monitorování výkonu v reálném čase. Sleduje systémové prostředky, aplikace, webové servery, databáze, DNS, poštu, hardwarové senzory a mnoho dalšího. Všechna data jsou shromažďována, ukládána a streamována pro interaktivní vizualizaci. Data jsou shromažďována každou sekundu.

Netdata je oblíbená mezi profesionály.

Převezměte kontrolu nad svými linuxovými servery.

btop

btop je interaktivní monitor zdrojů s příjemným uživatelským rozhraním pro správu Linuxových serverů.

Procesy můžete vizualizovat ve stromové struktuře, filtrovat je a spravovat. btop také nabízí automatické škálování grafů pro zobrazení využití sítě.

Kromě toho, můžete monitorovat rychlost disku a I/O aktivitu. Funguje na Linuxu, FreeBSD a macOS.

Závěr

Doufáme, že vám tyto nástroje pomohou vizualizovat vytížení serveru v reálném čase a efektivně řešit problémy. Pokud začínáte jako správce systému, doporučujeme tento kurz Udemy.