Per offrirti un'esperienza di navigazione sempre migliore, questo sito utilizza cookie propri e di terze parti, partner selezionati. I cookie di terze parti potranno anche essere di profilazione.
Le tue preferenze si applicheranno solo a questo sito web. Puoi modificare le tue preferenze in qualsiasi momento ritornando su questo sito o consultando la nostra informativa sulla riservatezza.
E' possibile rivedere la nostra privacy policy cliccando qui e la nostra cookie policy cliccando qui.
Per modificare le impostazioni dei cookies clicca qui
  • seguici su feed rss
  • seguici su twitter
  • seguici su linkedin
  • seguici su facebook
  • cerca

SEI GIA' REGISTRATO? EFFETTUA ADESSO IL LOGIN.



ricordami per 365 giorni

HAI DIMENTICATO LA PASSWORD? CLICCA QUI

NON SEI ANCORA REGISTRATO ? CLICCA QUI E REGISTRATI !

Come visualizzare i processi attivi in tempo reale, in Linux: il comando top

di :: 27 febbraio 2020
Come visualizzare i processi attivi in tempo reale, in Linux: il comando top

Una macchina Linux non è mai inattiva, esistono infatti sempre una serie di processi in esecuzione in background.

Il comando top fornisce la lista dei processi attivi in tempo reale, cioè non fornisce un mero elenco statico, ma una lista che si aggiorna in tempo reale.

top

Il risultato ad esempio è il seguente

top - 10:26:27 up 214 days, 23:50,  1 user,  load average: 0.53, 1.15, 1.81
Tasks: 156 total,   1 running, 154 sleeping,   1 stopped,   0 zombie
%Cpu(s):  9.5%us, 31.2%sy, 0.0%ni, 27.0%id, 7.6%wa, 1.0%hi, 23.7%si, 0.0%st
KiB Mem : 32780336 total, 14450032 free,   500476 used, 17829828 buff/cache
KiB Swap: 16515068 total, 16515068 free,        0 used. 30150864 avail Mem 

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND                                                                                                                      
24954 root      20   0 1836664  59736  41100 S   1,0  0,2 946:07.05 fail2ban-server                                                                                                              
    9 root      20   0       0      0      0 S   0,3  0,0 148:54.60 rcu_sched                                                                                                                    
 1010 root      20   0   75996  31536  31204 S   0,3  0,1  79:06.74 systemd-journal                                                                                                              
    1 root      20   0  191112   3788   2348 S   0,0  0,0  20:38.11 systemd                                                                                                                      
    2 root      20   0       0      0      0 S   0,0  0,0   0:04.14 kthreadd                                                                                                                     
    3 root      20   0       0      0      0 S   0,0  0,0   0:03.35 ksoftirqd/0                                                                                                                  
    5 root       0 -20       0      0      0 S   0,0  0,0   0:00.00 kworker/0:0H                                                                                                                 
    7 root      rt   0       0      0      0 S   0,0  0,0   0:11.01 migration/0                                                                                                                  
    8 root      20   0       0      0      0 S   0,0  0,0   0:00.00 rcu_bh                                                                                                                       
   10 root       0 -20       0      0      0 S   0,0  0,0   0:00.00 lru-add-drain                                                                                                                
   11 root      rt   0       0      0      0 S   0,0  0,0   1:37.85 watchdog/0                                                                                                                   
   12 root      rt   0       0      0      0 S   0,0  0,0   1:11.94 watchdog/1                                                                                                                   
   13 root      rt   0       0      0      0 S   0,0  0,0   0:10.63 migration/1                                                                                                                  
   14 root      20   0       0      0      0 S   0,0  0,0   0:04.04 ksoftirqd/1                                                                                                                  
   16 root       0 -20       0      0      0 S   0,0  0,0   0:00.00 kworker/1:0H                                                                                                                 
   17 root      rt   0       0      0      0 S   0,0  0,0   1:14.97 watchdog/2                                                                                                                   
   18 root      rt   0       0      0      0 S   0,0  0,0   0:09.63 migration/2                                                                                                                  
   19 root      20   0       0      0      0 S   0,0  0,0   3:53.38 ksoftirqd/2                                                                                                                  
   21 root       0 -20       0      0      0 S   0,0  0,0   0:00.00 kworker/2:0H                                                                                                                 
   22 root      rt   0       0      0      0 S   0,0  0,0   1:09.36 watchdog/3                                                                                                                   
   23 root      rt   0       0      0      0 S   0,0  0,0   0:22.04 migration/3    

In testa sono presenti, alcune informazioni tra cui l'utilizzo complessivo di CPU e RAM sul nostro sistema.

Vediamoli nel dettaglio

top - 10:26:27 up 214 days, 23:50,  1 user,  load average: 0.53, 1.15, 1.81

Nella prima riga:
"10:26:27" indica  l'ora corrente
"up 214 days": indica quanto tempo il sistema è stato avviato
"1 user": indicata quanti utenti sono collegati al sistema
"load average 0.53, 1.15, 1.81": è il carico medio del sistema.

Il carico medio è il risultato di una serie di calcoli per valutare l’utilizzo medio della CPU in un determinato periodo di tempo: 1, 5 e 15 minuti.

Nel nostro esempio
il carico medio nell'ultimo minuto è 0.53
il carico medio negli ultimi 5 minuti è 1.15
il carico medio negli ultimi 15 minuti è 1.81

Un carico medio pari a 1 significa che la CPU è completamente utilizzata ma i programmi non necessitano di attendere per essere utilizzati.
Un carico medio superiore a 1 indica che i programmi dovranno attendere per essere utilizzati e che il sistema diventerà più lento.
Se il carico medio è molto superiore ad 1, ed il server è lento, consigliamo di aumentare le specifiche tecniche del server rendendolo più performante.

NOTA: per ottenere il load average esiste anche il comando "uptime"

Proseguiamo ad analizzare alla riga successiva

Tasks: 156 total,   1 running, 154 sleeping,   1 stopped,   0 zombie

E' indicato il numero di task (processi) presenti: 156, di cui 1 è in esecuzione (running), 154 in stato di attesa (sleeping), 1 terminato, 0 in stato zombie.

I processi "zombie" sono processi già ultimati,  ma che possiedono ancora un PID e quindi sono presenti nell'elenco dei processi.

In generale, quando avviamo un programma, succede questo:

  • il processo "padre" viene avviato
  • vengono creati uno o più processi "figli"
  • i processi "figli" svolgono le loro operazioni fino a completamento
  • il padre leggerà il segnale di uscita dei figli: il processo viene terminato, e quindi le risorse liberate, quando i figli hanno ultimato la loro operazione:

Se, per qualche motivo, il "padre" non riesce a leggere il segnale di uscita dei "figli", il figlio rimarrà attivo nel sistema come un processo "zombie" che in generale non dovrebbero occupare risorse, ma è sempre meglio non tenerli in vita.

Possiamo inviduare i processi zombie, con il loro PID, così

$ ps aux | grep Z

Ottenuto il PID, li killiamo così, dove al posto di {PID} indichiamo l'id del processo da killare

kill -s SIGCHLD {PID}

Dopo questa digressione sui processi zombie torniamo al risultato del nostro comando top.

La terza riga presenta il dettaglio di utilizzo della CPU

%Cpu(s):  9.5%us, 31.2%sy, 0.0%ni, 27.0%id, 7.6%wa, 1.0%hi, 23.7%si, 0.0%st

"9.5%us": indica che i processi utente occupano il 9.5%;
"31.2%sy": indica che i processi di sistema occupano il 31.2%;
"27.0%id": indica la percentuale di CPU disponibile;
"7.6%wa": indica il tempo di attesa IO della CPU.

In generale, come prima cosa controllare il valore del %id per vedere quanta CPU è ancora disponibile.
Se il valore di %id è basso allora controllare %us e %wa per capire cosa sta occupando la CPU.

Passiamo alla quarta e quinta riga montrano l'utilizzo della memoria:

KiB Mem : 32780336 total, 14450032 free,   500476 used, 17829828 buff/cache
KiB Swap: 16515068 total, 16515068 free,        0 used. 30150864 avail Mem 

Mem: 255592k total, 167568k used, 88024k free, 25068k buffers
Swap: 524280k total, 0k used, 524280k free, 85724k cached

"32780336 total": è la memoria totale del sistema;
"14450032 free" è la parte di RAM che non contiene dati, cioè non usata;
"500476 used": è la parte di RAM che contiene dati cioè usata;
“17829828 buff/cache” è la parte di RAM che contiene dati per l’IO.

Per calcolare la quantità corretta di memoria disponibile bisogna usare la seguente formula:
memoria free + (memoria buffers + memoria cached)
Per calcolare la quantità di memoria usata dai programmi bisogna usare la seguente formula:
memoria used - (memoria buffers + memoria cached)

La lista dei processi attivi

Dopo le informazioni relativi all'utilizzi di CPU e RAM, abbiamo la lista dei processi attivi: utilizziamo le frecce della tastiere che scorrere l'elenco completo dei processi.

Vediamo nel dettaglio le colonne presenti:

  1. PID: l'id del processo attivo.
  2. USER: l'utente che ha lanciato il processo.
  3. PR: indica la priorità dell'attività.
  4. NI: indica l’indice del processo. Un valore positivo negativo indica una priorità più elevata, mentre un valore positivo positivo indica una priorità inferiore.
  5. VIRT: il valore complessivo di memoria virtuale utilizzata.
  6. RES: la quantità di memoria residente utilizzata.
  7. SHR: rappresenta la dimensione della memoria condivisa (kb) utilizzata da un'attività.
  8. S: Lo stato di una attività. I valori possibili sono S (sleeping), D (uninterruptible sleep), R (running), Z (zombies), o T (stopped or traced).
  9. %CPU: Percentuale di CPU utilizzata da un'attività.
  10. %MEM: Percentuale RAM utilizzata da un'attività.
  11. TIME+: il tempo totale di CPU utilizzata
  12. COMMAND: Il comando utilizzato per creare il processo

Come possiamo vedere, dopo aver lanciato il comando top, la lista di aggiorna dopo 3 secondi, all'infinito.

Se volessimo ad esempio limitarci a 10 "aggiornamenti", utilizziamo:

top -n 10

Se invece volessimo modificare i 3 secondi, tra un aggiornamento e il successivo, digitiamo "d" mentre top è in esecuzione: apparirà un prompt, in testa alla lista dei processi, in cui dobbiamo indicare di quanto modificare il numero di secondi

Change delay from 3,0 to 

Digitiamo ad esempio 10 secondi: 10,0

In questo modo i dati verranno aggiornati ogni 10 secondi.

Come uscire dal comando top

Per uscire dal comando top, durante l'esecuzione di top, digitare "q" (quite).

Visualizzare i processi attivi di un utente

Per limitarci alla visualizzazione dei processi attivi di uno specifico utente, digitiamo top con l'opzione "u" (user) seguita dal nome utente.

Ad esempio per estrarre i processi attivi dell'utente root:

top -u root

Terminare un processo

Durante l'esecuzione di top, possiamo "killare" un processo digitando "k": apparirà un prompt in cui dovremo indicare il PID del processo che vogliamo terminare

PID to signal/kill [default pid = 24954] 

Digitiamo ad esempio il PID 21014, per terminare questo specifico processo.

In alternativa al comando top, per killare un processo, possiamo utillzzare il comando "kiil -9", seguito dal PID del processo. Ad esempio:

kill -9 21014

Ordinare i processi per utilizzo di CPU

Per ordinare i processi in base all'utilizzo di CPU (colonna %CPU), durante l'esecuzione di top, utilizziamo assieme i tasti SHIFT + P

Ordinare i processi per utilizzo di RAM

Per ordinare i processi in base all'utilizzo di RAM (colonna %MEM), utilizziamo assieme i tasti SHIFT + M

Ordinare i processi per tempo di esecuzione

Per ordinare i processi in base al tempo di esecuzione (colonna TIME+) utilizziamo assieme i tasti SHIFT + T

 
 
 
 
pay per script

Hai bisogno di uno script PHP personalizzato, di una particolare configurazione su Linux, di una gestione dei tuoi server Linux, o di una consulenza per il tuo progetto?

x

ATTENZIONE