I soliti sospetti: iostat, vmstat e dstat
Iniziamo con la trinità sacra degli strumenti di monitoraggio delle prestazioni:
1. iostat: Il detective dell'I/O
Quando l'I/O del disco ti dà mal di testa, iostat
è la tua aspirina. Questo strumento pratico ti offre una panoramica dell'utilizzo della CPU e delle statistiche I/O per tutti i tuoi dispositivi.
$ iostat -xz 1
Linux 5.4.0-42-generic (myserver) 15/06/2023 _x86_64_ (4 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
2.43 0.00 1.22 0.31 0.00 96.04
Device r/s w/s rkB/s wkB/s rrqm/s wrqm/s %rrqm %wrqm r_await w_await aqu-sz rareq-sz wareq-sz svctm %util
sda 0.35 2.13 14.44 34.96 0.00 0.57 0.00 21.05 0.57 2.50 0.01 41.54 16.43 0.40 0.10
Cosa ci dice questo? Beh, abbiamo un sistema piuttosto inattivo qui. La CPU è inattiva per il 96% del tempo e il nostro disco (sda) è appena utilizzato con solo lo 0,10% di utilizzo.
2. vmstat: Il maestro della memoria
vmstat
è la tua finestra sull'anima della memoria del sistema. Ti mostra tutto, dalla lunghezza della coda di esecuzione all'uso dello swap.
$ vmstat 1
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
1 0 0 6981496 191268 724132 0 0 3 5 36 79 2 1 97 0 0
0 0 0 6981496 191268 724132 0 0 0 0 209 355 1 0 99 0 0
Guarda quella colonna free
- abbiamo circa 7GB di memoria libera. Non c'è da stupirsi che il nostro sistema sia così tranquillo!
3. dstat: Il tuttofare
Se iostat
e vmstat
avessero un figlio, sarebbe dstat
. Questo strumento versatile combina statistiche di CPU, disco, rete, paging e sistema in un'unica uscita colorata.
$ dstat -cdngy
----total-cpu-usage---- -dsk/total- -net/total- ---paging-- ---system--
usr sys idl wai stl| read writ| recv send| in out | int csw
2 1 97 0 0| 14k 40k| 0 0 | 0 0 | 237 420
1 0 99 0 0| 0 0 | 66B 722B| 0 0 | 206 357
1 0 99 0 0| 0 0 | 60B 722B| 0 0 | 208 355
Ora questo è quello che chiamo un negozio unico per le statistiche di sistema!
Scavando più a fondo: Gli eroi sconosciuti
Ma aspetta, c'è di più! Esploriamo alcuni strumenti meno conosciuti ma altrettanto potenti:
4. sar: Il viaggiatore del tempo
sar
(System Activity Reporter) è come una macchina del tempo per le statistiche del tuo sistema. Può mostrarti dati storici e persino generare grafici interessanti.
$ sar -u 1 3
Linux 5.4.0-42-generic (myserver) 15/06/2023 _x86_64_ (4 CPU)
13:00:01 CPU %user %nice %system %iowait %steal %idle
13:00:02 all 2.01 0.00 0.75 0.25 0.00 96.98
13:00:03 all 1.75 0.00 0.75 0.00 0.00 97.49
13:00:04 all 1.75 0.00 0.75 0.25 0.00 97.24
Average: all 1.84 0.00 0.75 0.17 0.00 97.24
Consiglio: Usa sar -A
per vedere TUTTE le statistiche. Ma attenzione, è come bere da un idrante!
5. perf: Il gigante del profiling
Quando hai bisogno di andare più a fondo, perf
è il tuo equipaggiamento da speleologia. Può profilare l'uso della CPU, tracciare le chiamate di sistema e persino analizzare i mancati accessi alla cache.
$ sudo perf top
Samples: 42K of event 'cpu-clock', 4000 Hz, Event count (approx.): 5250000000 lost: 0/0 drop: 0/0
Overhead Shared Object Symbol
7.89% [kernel] [k] _raw_spin_unlock_irqrestore
4.32% [kernel] [k] finish_task_switch
3.21% [kernel] [k] __schedule
2.96% [kernel] [k] schedule
Guarda! La funzione _raw_spin_unlock_irqrestore
del kernel sta occupando quasi l'8% della nostra CPU. Forse è il momento di approfondire il codice del kernel?
La trama si infittisce: Visualizzare le prestazioni
A volte, un'immagine vale più di mille output di strace
. Ecco alcuni strumenti grafici:
6. htop: Il visualizzatore di processi interattivo
Pensa a top
con gli steroidi. htop
ti offre una vista colorata e interattiva dei tuoi processi.

7. atop: Il monitor di sistema e processi
atop
è come il cugino superdotato di top
. Mostra contatori a livello di sistema e statistiche per processo in un'unica vista.
$ atop
ATOP - myserver 2023/06/15 13:15:23 ------------------------------
PRC | sys 1.85s | user 3.70s | #proc 213 | #zombie 0 | #exit 0 |
CPU | sys 2% | user 4% | irq 0% | idle 94% | wait 0% |
CPL | avg1 0.02 | avg5 0.05 | avg15 0.05 | csw 53592 | intr 43357 |
MEM | tot 15.5G | free 6.8G | cache 724.7M | buff 191.3M | slab 409.8M |
SWP | tot 15.9G | free 15.9G | | vmcom 4.7G | vmlim 23.7G |
DSK | sda | busy 0% | read 131 | write 644 | avio 2.50 ms |
NET | transport | tcpi 37 | tcpo 36 | udpi 0 | udpo 0 |
NET | network | ipi 37 | ipo 36 | ipfrw 0 | deliv 37 |
NET | eth0 ---- | pcki 19 | pcko 18 | si 1 Kbps | so 1 Kbps |
PID SYSCPU USRCPU VGROW RGROW RDDSK WRDSK ST EXC S CPU CMD 1/600
1829 0.37s 0.73s 0K 0K 0K 0K -- - R 1% atop
1 0.02s 0.03s 0K 0K 0K 0K -- - S 0% systemd
Ora questo è quello che chiamo sovraccarico di informazioni!
Il segreto: Script di monitoraggio personalizzati
A volte, gli strumenti pronti all'uso non bastano. È allora che ti rimbocchi le maniche e scrivi i tuoi script di monitoraggio. Ecco un semplice esempio che combina i dati di iostat
e vmstat
:
#!/usr/bin/env python3
import subprocess
import time
def get_iostat():
output = subprocess.check_output("iostat -c 1 1 | tail -n 2 | head -n 1", shell=True).decode()
cpu_stats = output.split()
return float(cpu_stats[5]) # %idle
def get_vmstat():
output = subprocess.check_output("vmstat 1 2 | tail -n 1", shell=True).decode()
stats = output.split()
return int(stats[3]) # free memory
while True:
cpu_idle = get_iostat()
free_mem = get_vmstat()
print(f"CPU Idle: {cpu_idle}%, Free Memory: {free_mem}K")
time.sleep(5)
Esegui questo script e avrai il tuo mini-sistema di monitoraggio!
Conclusione: Diventa lo Sherlock Holmes delle prestazioni di sistema
Monitorare i sistemi Linux a un livello basso è come essere un detective in un romanzo cyberpunk. Hai i tuoi strumenti (iostat, vmstat, dstat), la tua lente d'ingrandimento (perf) e il tuo Watson (script personalizzati). La chiave è sapere quale strumento usare quando e come interpretare i risultati.
Ricorda:
- Inizia con le basi (iostat, vmstat, dstat) per una panoramica rapida
- Approfondisci con strumenti specializzati come perf quando necessario
- Visualizza i dati con htop e atop per una prospettiva diversa
- Non aver paura di scrivere script personalizzati per le tue esigenze specifiche
E soprattutto, pratica, pratica, pratica! Più sistemi monitori, meglio diventerai nel rilevare anomalie e risolvere enigmi di prestazioni.
Cibo per la mente
"Lo strumento di debug più efficace è ancora il pensiero attento, unito a dichiarazioni di stampa posizionate con giudizio." — Brian Kernighan
Anche se abbiamo a disposizione tutti questi strumenti sofisticati, a volte l'approccio migliore è fare un passo indietro, pensare criticamente al problema e magari inserire qualche dichiarazione echo
strategica. Non lasciare che gli strumenti oscurino le tue capacità di risoluzione dei problemi!
Cosa c'è dopo?
Ora che sei armato di questa conoscenza, perché non impostare un ambiente di test e iniziare a sperimentare? Prova a simulare diversi scenari di carico e vedi come rispondono questi strumenti. O meglio ancora, applica queste tecniche a un problema reale che stai affrontando. La prova del budino è nel mangiarlo, dopotutto!
Buon monitoraggio e che i tuoi sistemi siano sempre performanti!