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.

htop screenshot
htop in azione: Una festa per gli occhi e un buffet per il cervello.

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!