Il comando top consente agli utenti di monitorare i processi e l'utilizzo delle risorse di sistema su Linux. È uno degli strumenti più utili nella casella degli strumenti di un amministratore di sistema e viene preinstallato su ogni distribuzione. A differenza di altri comandi come ps
, è interattivo e puoi sfogliare l'elenco dei processi, terminare un processo e così via.
In questo articolo capiremo come utilizzare il comando top.
Contenuti
- 1 Per iniziare
- 2 Capire l'interfaccia di top:l'area di riepilogo
- 2.1 Tempo di sistema, tempo di attività e sessioni utente
- 2.2 Utilizzo della memoria
- 2.3 Compiti
- 2.4 Utilizzo della CPU
- 2.5 Carica media
- 3 Comprendere l'interfaccia di top:l'area delle attività
- 4 principali esempi di utilizzo dei comandi
- 4.1 Processi di eliminazione
- 4.2 Ordinamento dell'elenco dei processi
- 4.3 Visualizzazione di un elenco di thread anziché di processi
- 4.4 Visualizzazione di percorsi completi
- 4.5 Vista foresta
- 4.6 Elencare i processi da un utente
- 4.7 Filtraggio attraverso i processi
- 4.8 Modifica dell'aspetto predefinito della CPU e delle statistiche sulla memoria
- 4.9 Salvataggio delle impostazioni
- 5 Conclusione
Per iniziare
Come avrai già intuito, devi semplicemente digitare questo per avviare top:
top
Questo avvia un'applicazione a riga di comando interattiva, simile a quella nella schermata seguente. La metà superiore dell'output contiene statistiche sui processi e sull'utilizzo delle risorse, mentre la metà inferiore contiene un elenco dei processi attualmente in esecuzione. È possibile utilizzare i tasti freccia e i tasti Pagina su/giù per scorrere l'elenco. Se vuoi uscire, premi semplicemente “q”.
Esistono diverse varianti di top, ma nel resto di questo articolo parleremo della variante più comune, quella fornita con il pacchetto "procps-ng". Puoi verificarlo eseguendo:
top -v
Se hai questa variante, questa apparirà nell'output, in questo modo:
procps-ng version 3.3.10
C'è un bel po' di cose nell'interfaccia di Top, quindi le analizzeremo un po' alla volta nella prossima sezione.
Capire l'interfaccia di top:l'area di riepilogo
Come abbiamo visto in precedenza, l'output di top è diviso in due diverse sezioni. In questa parte dell'articolo, ci concentreremo sugli elementi in metà dell'output. Questa regione è anche chiamata "area di riepilogo".
Tempo di sistema, tempo di attività e sessioni utente
In alto a sinistra dello schermo (come indicato nella schermata sopra), in alto viene visualizzata l'ora corrente. Questo è seguito dal tempo di attività del sistema, che ci dice per quanto tempo il sistema è stato in esecuzione. Ad esempio, nel nostro esempio, l'ora corrente è "15:39:37" e il sistema è in esecuzione da 90 giorni, 15 ore e 26 minuti.
Poi viene il numero di sessioni utente attive. In questo esempio sono presenti due sessioni utente attive. Queste sessioni possono essere effettuate su un TTY (fisicamente sul sistema, tramite la riga di comando o un ambiente desktop) o un PTY (come una finestra dell'emulatore di terminale o su SSH). Infatti, se accedi a un sistema Linux tramite un ambiente desktop, e quindi avvii un emulatore di terminale, troverai due sessioni attive.
Se vuoi avere maggiori dettagli sulle sessioni utente attive, usa il who
comando.
Utilizzo della memoria
La sezione "memoria" mostra le informazioni relative all'utilizzo della memoria del sistema. Le righe contrassegnate con "Mem" e "Swap" mostrano rispettivamente le informazioni sulla RAM e lo spazio di scambio. In poche parole, uno spazio di swap è una parte del disco rigido che viene utilizzata come la RAM. Quando l'utilizzo della RAM diventa quasi pieno, le regioni della RAM utilizzate di rado vengono scritte nello spazio di scambio, pronte per essere recuperate in seguito quando necessario. Tuttavia, poiché l'accesso ai dischi è lento, fare troppo affidamento sullo scambio può danneggiare le prestazioni del sistema.
Come ci si aspetterebbe, i valori “totale”, “libero” e “usato” hanno il loro significato abituale. Il valore "avail mem" è la quantità di memoria che può essere allocata ai processi senza causare ulteriori scambi.
Il kernel Linux cerca anche di ridurre i tempi di accesso al disco in vari modi. Mantiene una "cache del disco" nella RAM, dove vengono archiviate le regioni del disco utilizzate di frequente. Inoltre, le scritture del disco vengono archiviate in un "buffer del disco" e alla fine il kernel le scrive sul disco. La memoria totale da loro consumata è il valore "buff/cache". Potrebbe sembrare una cosa negativa, ma in realtà non lo è:la memoria utilizzata dalla cache verrà allocata ai processi, se necessario.
Compiti
La sezione "Attività" mostra le statistiche relative ai processi in esecuzione sul tuo sistema. Il valore "totale" è semplicemente il numero totale di processi. Ad esempio, nello screenshot sopra, ci sono 27 processi in esecuzione. Per comprendere il resto dei valori, abbiamo bisogno di un po' di background su come il kernel Linux gestisce i processi.
I processi eseguono un mix di lavoro legato all'I/O (come la lettura di dischi) e lavoro legato alla CPU (come l'esecuzione di operazioni aritmetiche). La CPU è inattiva quando un processo esegue I/O, quindi i sistemi operativi passano all'esecuzione di altri processi durante questo periodo. Inoltre, il sistema operativo consente l'esecuzione di un determinato processo per un periodo di tempo molto ridotto, quindi passa a un altro processo. Ecco come appaiono i sistemi operativi come se fossero "multitasking". Fare tutto questo ci richiede di tenere traccia dello "stato" di un processo. In Linux, un processo può trovarsi in uno dei seguenti stati:
- Eseguibile (R):un processo in questo stato è in esecuzione sulla CPU oppure è presente nella coda di esecuzione, pronto per essere eseguito.
- Sospensione interrompibile (S):i processi in questo stato sono in attesa del completamento di un evento.
- Sospensione ininterrotta (D):in questo caso, un processo è in attesa del completamento di un'operazione di I/O.
- Arrestato (T):questi processi sono stati interrotti da un segnale di controllo del lavoro (ad esempio premendo Ctrl+Z) o perché vengono tracciati.
- Zombie (Z):il kernel mantiene varie strutture di dati in memoria per tenere traccia dei processi. Un processo può creare un certo numero di processi figlio e possono uscire mentre il genitore è ancora in giro. Tuttavia, queste strutture di dati devono essere mantenute fino a quando il genitore non ottiene lo stato dei processi figlio. Tali processi terminati le cui strutture di dati sono ancora in circolazione sono chiamati zombi.
I processi negli stati D e S sono mostrati in "inattivo" e quelli nello stato T sono mostrati in "arrestato". Il numero di zombi viene visualizzato come valore "zombi".
Utilizzo della CPU
La sezione relativa all'utilizzo della CPU mostra la percentuale di tempo della CPU speso per varie attività. Il us
il valore è il tempo che la CPU impiega nell'esecuzione dei processi nello spazio utente. Allo stesso modo, il sy
il valore è il tempo impiegato per eseguire i processi dello spazio kernel.
Linux usa un valore "bello" per determinare la priorità di un processo. Un processo con un alto valore "bello" è "più piacevole" rispetto ad altri processi e ottiene una priorità bassa. Allo stesso modo, i processi con un "bello" inferiore ottengono una priorità maggiore. Come vedremo in seguito, il valore predefinito “nice” può essere modificato. Il tempo speso per eseguire processi con un "nice" impostato manualmente appare come ni
valore.
Questo è seguito da id
, che è il tempo in cui la CPU rimane inattiva. La maggior parte dei sistemi operativi mette la CPU in modalità di risparmio energetico quando è inattiva. Poi viene il wa
valore, che è il tempo che la CPU impiega in attesa del completamento dell'I/O.
Gli interrupt sono segnali al processore su un evento che richiede un'attenzione immediata. Gli interrupt hardware vengono in genere utilizzati dalle periferiche per informare il sistema di eventi, come la pressione di un tasto su una tastiera. D'altra parte, gli interrupt software vengono generati a causa di istruzioni specifiche eseguite sul processore. In entrambi i casi, il sistema operativo li gestisce e il tempo dedicato alla gestione degli interrupt hardware e software è dato da hi
e si
rispettivamente.
In un ambiente virtualizzato, una parte delle risorse della CPU viene assegnata a ciascuna macchina virtuale (VM). Il sistema operativo rileva quando ha del lavoro da fare, ma non può eseguirlo perché la CPU è occupata su un'altra VM. La quantità di tempo perso in questo modo è il tempo "rubato", mostrato come st
.
Carica media
La sezione del carico medio rappresenta il “carico” medio su uno, cinque e quindici minuti. "Carico" è una misura della quantità di lavoro di calcolo eseguito da un sistema. Su Linux, il carico è il numero di processi negli stati R e D in un dato momento. Il valore del "carico medio" ti dà una misura relativa di quanto tempo devi aspettare prima che le cose vengano fatte.
Consideriamo alcuni esempi per comprendere questo concetto. Su un sistema single core, una media di carico di 0,4 significa che il sistema sta facendo solo il 40% del lavoro che può fare. Una media di carico di 1 significa che il sistema è esattamente al massimo:il sistema verrà sovraccaricato aggiungendo anche un po' di lavoro aggiuntivo. Un sistema con un carico medio di 2,12 significa che è sovraccarico del 112% di lavoro in più rispetto a quello che può gestire.
In un sistema multi-core, devi prima dividere il carico medio per il numero di core della CPU per ottenere una misura simile.
Inoltre, la "media di carico" non è in realtà la tipica "media" che la maggior parte di noi conosce. Si tratta di una "media mobile esponenziale", il che significa che una piccola parte delle medie di carico precedenti viene presa in considerazione nel valore corrente. Se sei interessato, questo articolo copre tutti i dettagli tecnici.
Capire l'interfaccia di top:l'area delle attività
L'area di riepilogo è relativamente più semplice e contiene un elenco di processi. In questa sezione, impareremo le diverse colonne mostrate nell'output predefinito di top.
- PID
Questo è l'ID del processo, un intero positivo univoco che identifica un processo.
- UTENTE
Questo è il nome utente "efficace" (che corrisponde a un ID utente) dell'utente che ha avviato il processo. Linux assegna un ID utente reale e un ID utente effettivo ai processi; quest'ultimo consente a un processo di agire per conto di un altro utente. (Ad esempio, un utente non root può elevare a root per installare un pacchetto.)
- PR e NI
Il campo "NI" mostra il valore "bello" di un processo. Il campo "PR" mostra la priorità di pianificazione del processo dal punto di vista del kernel. Il valore piacevole influisce sulla priorità di un processo.
- VIRT, RES, SHR e %MEM
Questi tre campi sono correlati al consumo di memoria dei processi. "VIRT" è la quantità totale di memoria consumata da un processo. Ciò include il codice del programma, i dati archiviati dal processo in memoria, nonché qualsiasi area di memoria che è stata scambiata sul disco. “RES” è la memoria consumata dal processo nella RAM e “%MEM” esprime questo valore come percentuale della RAM totale disponibile. Infine, "SHR" è la quantità di memoria condivisa con altri processi.
- S
Come abbiamo visto prima, un processo può trovarsi in vari stati. Questo campo mostra lo stato del processo nel modulo a lettera singola.
- TEMPO+
Questo è il tempo CPU totale utilizzato dal processo dall'inizio, preciso al centesimo di secondo.
- COMANDO
La colonna COMANDO mostra il nome dei processi.
Esempi di utilizzo dei comandi principali
Finora, abbiamo discusso dell'interfaccia di top. Tuttavia, può anche gestire i processi e puoi controllare vari aspetti dell'output di Top. In questa sezione faremo alcuni esempi.
Nella maggior parte degli esempi seguenti, devi premere un tasto mentre top è in esecuzione. Tieni presente che queste pressioni di tasti fanno distinzione tra maiuscole e minuscole , quindi se premi "k" mentre Blocco maiuscole è attivo, in realtà hai premuto una "K" e il comando non funzionerà o farà qualcos'altro.
Processi di uccisione
Se vuoi terminare un processo, premi semplicemente "k" quando top è in esecuzione. Verrà visualizzato un messaggio che richiederà l'ID del processo e premi Invio.
Quindi, inserisci il segnale usando il quale il processo dovrebbe essere terminato. Se lasci questo campo vuoto, top usa un SIGTERM, che consente ai processi di terminare senza problemi. Se vuoi terminare un processo con forza, puoi digitare SIGKILL qui. Puoi anche digitare il numero del segnale qui. Ad esempio, il numero per SIGTERM è 15 e SIGKILL è 9.
Se lasci vuoto l'ID processo e premi invio direttamente, cesserà il processo più in alto nell'elenco. Come accennato in precedenza, puoi scorrere utilizzando i tasti freccia e modificare il processo che desideri interrompere in questo modo.
Ordinamento dell'elenco dei processi
Uno dei motivi più frequenti per utilizzare uno strumento come top è scoprire quale processo sta consumando più risorse. È possibile premere i seguenti tasti per ordinare l'elenco:
- 'M' per ordinare in base all'utilizzo della memoria
- 'P' per ordinare in base all'utilizzo della CPU
- 'N' per ordinare per ID processo
- 'T' per ordinare in base al tempo di esecuzione
Per impostazione predefinita, in alto vengono visualizzati tutti i risultati in ordine decrescente. Tuttavia, puoi passare all'ordine crescente premendo "R".
Puoi anche ordinare l'elenco con il -o
interruttore. Ad esempio, se desideri ordinare i processi in base all'utilizzo della CPU, puoi farlo con:
top -o %CPU
Puoi ordinare l'elenco in base a qualsiasi attributo nell'area di riepilogo allo stesso modo.
Mostrare un elenco di thread invece di processi
In precedenza abbiamo accennato al modo in cui Linux passa da un processo all'altro. Sfortunatamente, i processi non condividono memoria o altre risorse, rendendo tali switch piuttosto lenti. Linux, come molti altri sistemi operativi, supporta un'alternativa "leggera", chiamata "thread". Fanno parte di un processo e condividono determinate aree di memoria e altre risorse, ma possono essere eseguiti contemporaneamente come processi.
Per impostazione predefinita, top mostra un elenco di processi nel suo output. Se invece vuoi elencare i thread, premi "H" quando top è in esecuzione. Nota che la riga "Attività" dice invece "Thread" e mostra il numero di thread invece di processi.
Potresti aver notato come nessuno degli attributi nell'elenco dei processi è cambiato. Com'è possibile, dato che i processi differiscono dai thread? All'interno del kernel Linux, thread e processi vengono gestiti utilizzando le stesse strutture di dati. Pertanto, ogni thread ha il proprio ID, stato e così via.
Se vuoi tornare alla visualizzazione del processo, premi di nuovo "H". Inoltre, puoi utilizzare il -H
passa a visualizzare i thread per impostazione predefinita.
top -H
Mostra percorsi completi
Per impostazione predefinita, top non mostra il percorso completo del programma, né fa una distinzione tra i processi dello spazio del kernel e i processi dello spazio utente. Se hai bisogno di queste informazioni, premi "c" mentre top è in esecuzione. Premi di nuovo "c" per tornare all'impostazione predefinita.
I processi dello spazio del kernel sono contrassegnati da parentesi quadre attorno ad essi. Ad esempio, nello screenshot qui sopra ci sono due processi del kernel, kthreadd
e khelper
. Nella maggior parte delle installazioni Linux, di solito ce ne saranno alcune in più.
In alternativa, puoi anche iniziare dall'alto con il -c
argomento:
top -c
Vista foresta
A volte, potresti voler vedere la gerarchia dei processi figlio-genitore. Puoi vederlo con la vista foresta, premendo 'v'/'V' mentre top è in esecuzione.
Come puoi vedere dallo screenshot qui sopra, il systemd
processo è stato il primo ad avviarsi sul sistema. Ha avviato processi come sshd
, che a sua volta ha creato altri sshd
processi e così via.
Elencare i processi da un utente
Per elencare i processi di un determinato utente, premi "u" quando top è in esecuzione. Quindi, digita il nome utente o lascialo vuoto per visualizzare i processi per tutti gli utenti.
In alternativa, puoi eseguire il comando in alto con -u
interruttore. In questo esempio, abbiamo elencato tutti i processi dell'utente root.
top -u root
Filtraggio attraverso processi
Se hai molti processi con cui lavorare, un ordinamento semplice non funzionerà abbastanza bene. In una situazione del genere, puoi utilizzare il filtro di top per concentrarti su alcuni processi. Per attivare questa modalità, premere 'o'/'O'. Viene visualizzato un messaggio in alto e puoi digitare un'espressione di filtro qui.
Un'espressione filtro è un'istruzione che specifica una relazione tra un attributo e un valore. Alcuni esempi di filtri sono:
-
COMMAND=getty
:Filtra i processi che contengono "getty" nell'attributo COMANDO. -
!COMMAND=getty
:Filtra i processi che non hanno "getty" nell'attributo COMANDO. -
%CPU>3.0
:filtra i processi con un utilizzo della CPU superiore al 3%.
Dopo aver aggiunto un filtro, puoi ridurre ulteriormente le cose aggiungendo più filtri. Per cancellare tutti i filtri che hai aggiunto, premi '='.
Modifica dell'aspetto predefinito della CPU e delle statistiche sulla memoria
Se sei principalmente a casa in un ambiente GUI, potrebbe non piacerti il modo predefinito di Top per mostrare le statistiche della CPU e della memoria. È possibile premere "t" e "m" per modificare lo stile della CPU e delle statistiche di memoria. Ecco uno screenshot della parte superiore, in cui abbiamo premuto "t" e "m" una volta.
Se premi "t" o "m" ripetutamente, vengono visualizzate quattro diverse visualizzazioni. Nelle prime due pressioni, scorre due diversi tipi di barre di avanzamento. Se si preme il tasto una terza volta, la barra di avanzamento viene nascosta. Se si preme nuovamente il tasto, vengono ripristinati i contatori predefiniti basati su testo.
Salvataggio delle impostazioni
Se hai apportato modifiche all'output di top, puoi salvarle per un uso successivo premendo "W". top scrive la sua configurazione nel .toprc
file nella tua home directory.
Conclusione
Il comando top è estremamente utile per monitorare e gestire i processi su un sistema Linux. Questo articolo graffia solo la superficie e c'è un bel po' che non abbiamo coperto. Ad esempio, ci sono molte più colonne che puoi aggiungere in alto. Per tutte queste cose, assicurati di controllare la pagina man eseguendo man top
sul tuo sistema.