Come monitorare CPU e memoria su Linux?

Scopri nel dettaglio l’impiego di risorse CPU e memoria da parte di specifici processi o dell’intero sistema.

In qualità di amministratore di sistema, ti capiterà di dover affrontare situazioni critiche in cui un’applicazione rallenta o smette di rispondere a causa di un eccessivo consumo di CPU, memoria o risorse di rete. Quando il server esegue un singolo processo, è relativamente semplice individuare il colpevole di un consumo anomalo. Tuttavia, in un contesto di server condiviso con più servizi in esecuzione, diventa essenziale poter identificare con precisione quale processo sta monopolizzando le risorse.

Esistono numerose soluzioni software di monitoraggio che offrono questa funzionalità in tempo reale. Tuttavia, se non ne disponi o preferisci un approccio basato su comandi, ecco alcune opzioni gratuite.

Analisi con “top”

Un buon punto di partenza è rappresentato dall’analisi degli output di “top” o “htop”, strumenti che forniscono una panoramica dettagliata dei processi in esecuzione.

Come evidenziato nell’esempio seguente, questi comandi offrono una chiara visione dell’utilizzo delle risorse da parte di ciascun processo. Si nota, ad esempio, che il processo MySQL sta assorbendo l’11,9% della CPU e il 2,5% della memoria.

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

Il comando “top” è preinstallato nella maggior parte delle distribuzioni Linux.

Una volta identificato un processo sospetto, potresti voler concentrare l’analisi su di esso. Puoi utilizzare il comando “top” con argomenti specifici.

Supponendo di conoscere l’ID del processo (PID), puoi utilizzare il comando:

top -p $PID

Di seguito è riportato un esempio di utilizzo con 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

Puoi anche utilizzare “grep” in combinazione con “top”. L’esempio seguente mostra come verificare l’utilizzo di 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

Analisi con “htop”

“htop” offre una panoramica simile a “top”, ma con maggiori dettagli. Tra le informazioni aggiuntive, spicca la colonna dei comandi, utile per identificare il percorso dei processi. Inoltre, l’interfaccia è colorata, facilitando la lettura.

Potrebbe essere necessario installare “htop”, poiché non è sempre preinstallato. Ecco come farlo:

Installazione di htop su Ubuntu

apt-get install htop

Installazione di htop su CentOS/RHEL 8.x

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

Panoramica con “glances”

Come suggerisce il nome, “glances” fornisce una rapida panoramica sull’utilizzo delle risorse del sistema in un’unica schermata. I processi vengono ordinati in base all’utilizzo della CPU.

Per installare “glances” su CentOS 8, usa DNF:

dnf install glances

Per CentOS 7, puoi usare YUM:

yum install glances

Monitoraggio avanzato con “atop”

“atop” è uno strumento simile ai precedenti, ma offre una funzionalità avanzata: la registrazione dell’output in un file, per un’analisi successiva. Questa funzione è particolarmente utile per indagare problemi che si manifestano in finestre temporali specifiche. È possibile programmare la registrazione dell’output tramite “crontab” o altri strumenti, per poi riprodurlo in un secondo momento.

Per registrare l’output in un file:

atop -w filename

Per riprodurre la registrazione:

atop -r filename

Questo strumento supporta diversi argomenti, come intervallo, campioni, ecc. Si consiglia di consultare la pagina man per un utilizzo più approfondito.

Per un’analisi in tempo reale, è sufficiente avviare “atop” e visualizzare l’output:

L’installazione di “atop” è semplice:

dnf install atop

Analisi con “ps”

Esaminiamo ora il comando “ps”.

Puoi utilizzarlo con l’opzione PID per visualizzare l’utilizzo di CPU e memoria di un processo specifico:

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

L’output sarà simile al seguente:

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

Monitoraggio con “nmon”

“nmon” è uno strumento interattivo a riga di comando per il monitoraggio di CPU, memoria, dischi, rete, NFS e memoria virtuale. Per visualizzare i processi più “pesanti” (in base all’utilizzo), avvia “nmon” e premi il tasto “t”.

L’installazione di “nmon” è semplice:

dnf install nmon

Monitoraggio con “Monit”

Monit è una soluzione open source basata su web e riga di comando per il monitoraggio di risorse, demoni, file, directory, file system, ecc.

Monit offre anche un widget interessante.

Si tratta di un software di monitoraggio leggero, ma con molte funzionalità da scoprire.

Monitoraggio con “Monitorix”

Monitorix è un’utilità open source leggera per il monitoraggio di server Linux. Monitorix integra un server HTTP che consente di verificare l’utilizzo delle risorse e altri parametri tramite un’interfaccia web. Alcuni dei report disponibili includono:

  • Kernel/temperatura
  • Filesystem e I/O
  • Traffico di rete
  • Apache/Mail/FTP/Nginx
  • MySQL/Varnish/Memcached

Monitorix offre anche la configurazione di avvisi per ricevere notifiche in caso di anomalie. Questa soluzione si rivela particolarmente adatta per la gestione di server basati su cloud, offrendo un monitoraggio proattivo.

Monitoraggio con “Netdata”

Netdata è uno strumento di monitoraggio delle prestazioni in tempo reale per risorse di sistema, applicazioni, server web, database, DNS, posta, sensori hardware e molto altro. È open source e semplice da configurare. I dati vengono raccolti, archiviati e trasmessi in streaming per una visualizzazione interattiva. La raccolta dei dati avviene ogni secondo, garantendo di non perdere nessun dettaglio.

È una soluzione molto apprezzata dai professionisti del settore.

Non esitare, prendi il controllo dei tuoi server Linux!

Monitoraggio interattivo con “btop”

btop è un monitor di risorse interattivo con un’interfaccia utente accattivante che semplifica la gestione dei server Linux.

btop consente di visualizzare i processi in una struttura ad albero, filtrarli e gestire le risorse. Inoltre, offre grafici che si ridimensionano automaticamente, mostrando l’utilizzo della rete.

Puoi anche monitorare la velocità del disco e l’attività I/O.

btop è compatibile con Linux, FreeBSD e macOS.

Conclusione

Spero che questi strumenti ti aiutino a monitorare l’utilizzo delle risorse dei tuoi server in tempo reale, per poter intervenire tempestivamente quando necessario. Se sei agli inizi come amministratore di sistema e desideri fare pratica, ti consiglio di dare un’occhiata a questo Corso Udemy.