Il comando top è uno tra i più utilizzati quando si lavora con sistemi Linux, essenziale per il monitoraggio dei processi e per diagnosticare problemi di performance del sistema. Sebbene esistano alternative moderne come htop, top resta lo standard universale presente in ogni distribuzione.
Vediamo come interpretare i dati, personalizzare la visualizzazione e ottimizzare il monitoraggio.
Descrizione delle informazioni
Quando da terminale eseguiamo il comando top viene visualizzata una tabella che si aggiorna costantemente con tutte le informazioni dei processi. Questo un esempio
top - 11:51:04 up 4 days, 12:08, 1 user, load average: 0.10, 0.06, 0.01
Tasks: 203 total, 1 running, 202 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.2 us, 0.2 sy, 0.0 ni, 99.5 id, 0.0 wa, 0.0 hi, 0.2 si, 0.0 st
MiB Mem : 3654.8 total, 2019.7 free, 689.7 used, 1210.3 buff/cache
MiB Swap: 4032.0 total, 3942.4 free, 89.6 used. 2965.2avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
612 root 20 0 0 0 0 S 0.3 0.0 0:32.87 xfsaild/dm-0
1 root 20 0 107216 14592 10108 S 0.0 0.4 0:27.77 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:00.05 kthreadd
3 root 20 0 0 0 0 S 0.0 0.0 0:00.00 pool_workqueue_
4 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 kworker/R-rcu_g
5 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 kworker/R-sync_
6 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 kworker/R-slub_Intestazione
Le prime cinque righe visualizzate dal comando permettono di capire lo stato generale del server
- uptime: indica da quanto tempo il sistema è acceso
- load average: rappresenta il carico medio del sistema negli ultimi 1, 5 e 15 minuti. Se il valore è uguale al numero di core della tua CPU, il sistema è al 100% del carico. Se è superiore, i processi sono in coda in attesa di risorse.
- task: mostra il conteggio totale dei processi e la loro distribuzione. Attenzione agli zombie, se il numero cresce, significa che alcuni processi non sono stati chiusi correttamente
- cpu: mostra l’utilizzo delle cpu
- us (user): tempo speso per processi utente
- sy (system): tempo speso dal kernel
- id (idle): tempo di inattività
- wa (iowait): indica quanto tempo la CPU sta aspettando che il disco completi un’operazione. Se questo valore è alto, il disco è troppo lento o sovraccarico
- mem: mostra l’utilizzo della ram
- free: ram a disposizione
- buff/cache: ram usata dal sistema per velocizzare l’accesso ai file. Il kernel la libera istantaneamente se un programma ne ha bisogno
- swap: mostra l’utilizzo della memoria swap, spazio sul disco rigido utilizzato dal sistema operativo come estensione temporanea della RAM quando questa si esaurisce
- used: se questo valore sale sopra lo zero, significa che la RAM è piena e il sistema sta usando il disco come memoria.
- avail Mem: la stima di quanta memoria è disponibile per avviare nuovi programmi senza andare in swap
Tabella
Nelle righe successive viene visualizzata una tabella con l’elenco dei processi in esecuzione. Vediamo il significato delle colonne
- PID (Process ID): l’identificativo numerico unico del processo
- USER: l’utente che ha originato il processo
- PR & NI: questi due valori determinano chi ha la precedenza nell’usare la CPU. PR è la priorità reale del kernel, mentre NI (Nice) è il valore impostato dall’utente (da -20 a +19)
- VIRT (Virtual Memory): la memoria totale allocata dal processo (inclusi file su disco e librerie)
- RES (Resident Size): la RAM fisica effettivamente occupata. È il dato più affidabile per capire quanto un programma stia pesando sul sistema
- SHR (Shared Memory): memoria condivisa con altri processi
- S (Status): lo stato del processo (Running, Sleeping, Zombie, o D per attese I/O critiche)
- %CPU & %MEM: percentuali di utilizzo delle risorse hardware rispetto al totale disponibile
- TIME+: il tempo totale di CPU consumato dal processo dal suo avvio (al centesimo di secondo)
- COMMAND: il nome dell’eseguibile o la riga di comando completa
Scorciatoie da tastiera
top non è statico. Mentre è in esecuzione è possibile utilizzare le scorciatoie da tastiera per riorganizzare i dati in tempo reale o cambiare la visualizzazione.
- Ordinamento rapido: Premere M per ordinare per memoria RAM, P per la CPU, T per il tempo di esecuzione e N per il PID
- Evidenziazione: premere b per evidenziare i processi attivi, x per colorare la colonna di ordinamento corrente e R per invertire l’ordine dei risultati
- Ricerca e Filtri: premere u seguito dal nome utente per isolare i processi di un profilo specifico. Per cercare un processo specifico per nome, usare il tasto L
- Kill: Premere
k, inserire il PID e premere invio per terminare un processo - Aggiornamento: il tasto d permette di impostare la frequenza di aggiornamento (es. ogni 1 o 2 secondi)
- Aggiungere/Rimuovere colonne: premere il tasto f per entrare nella gestione dei campi, dove puoi selezionare quali colonne vedere e in che ordine
Per salvare le personalizzazioni (colonne aggiunte, colori o criteri di ordinamento) e far sì che diventino quelle predefinite ogni volta che viene vviato il comando, premere il tasto W ed in alto a sinistra verrà visualizzato un messaggio di conferma “Wrote configuration to ‘/home/utente/.toprc’“. In questo modo, il comando crea (o aggiorna) un file di configurazione chiamato .toprc nella cartella home.
Filtrare e personalizzare con le opzioni
Spesso non serve monitorare l’intero ecosistema dei processi, ma focalizzarsi solo su ciò che conta in quel momento. Il comando top offre potenti opzioni di avvio che permettono di isolare i dati immediatamente.
Per monitorare un utente specifico, il comando
top -u [nome_utente]è la soluzione ideale. Se invece l’analisi riguarda un servizio specifico di cui conosciamo il PID
top -p [PID]e verrà filtrata la vista esclusivamente su quel processo.
Di seguito una tabella riassuntiva con le opzioni di avvio del comando
| Opzione | Descrizione | Utilizzo |
|---|---|---|
| -u [utente] | Filtra la visualizzazione per un utente specifico | Monitorare solo i propri processi o quelli di un servizio |
| -p [PID] | Mostra esclusivamente i dati relativi a uno o più PID | Analisi puntuale di un software specifico già identificato |
| -d [secondi] | Imposta l’intervallo di aggiornamento (anche decimali, es. 0.5) | Monitorare picchi di carico improvvisi e molto rapidi |
| -c | Mostra il percorso completo del comando e gli argomenti | Distinguere tra diversi script che hanno lo stesso nome eseguibile |
| -H | Attiva la visualizzazione dei singoli thread | Analizzare app multi-thread (come Java o Chrome) per trovare il thread critico |
| -b (es. top -b -n 1 > processi.txt) | Modalità Batch: produce output testuale non interattivo. Nell’esempio esegue un solo aggiornamento e scrive tutto nel file | Esportazione dati, creazione di log o script di automazione |
| -n [num] | Specifica il numero di aggiornamenti prima di uscire | Spesso usato con -b per scattare una “istantanea” del sistema |
| -1 | Mostra le statistiche per ogni singolo core della CPU | Diagnosticare squilibri di carico su sistemi multi-core |
| -s | Modalità Sicura: disabilita comandi interattivi (kill/renice) | Consentire il monitoraggio a utenti senza permessi di modifica |
