sviluppo-web-qa.it

Linux - Come posso vedere cosa sta aspettando il disco IO

Ho un server che ha un carico davvero elevato. Niente mi sta saltando addosso in termini di utilizzo della CPU e non si sta scambiando.

Penso che sia perché alcuni processi stanno aspettando l'IO del disco e voglio vedere cosa sta aspettando.

Esiste un programma che mi mostrerà quali processi sono in attesa di IO? Conosco iotop ma questo mostra ciò che sta attualmente facendo IO.

O è una domanda stupida? (Se sì, spiega come :))

42
Rory

È possibile utilizzare un monitor I/O come iotop, ma mostrerà solo processi o thread con le operazioni I/O correnti.

Se è necessario sfogliare i processi in attesa di I/O, utilizzare watch per monitorare i processi con flag STAT 'D' come di seguito:

watch -n 1 "(ps aux | awk '\$8 ~ /D/  { print \$0 }')"
47
Ali Mezgani

ps axu e cerca i processi che si trovano nello stato "D". Sulla base della manpage ps (1) , i processi che si trovano nello stato D sono in stato di sonno ininterrotto, il che significa quasi sempre "in attesa di IO". Sfortunatamente, uccidere questi processi di solito non è possibile.

18
Zanchey

La risposta di Zanchey è la migliore che io conosca per scoprire cosa sta aspettando IO.

Quando dici che il tuo server è sotto carico, cosa intendi con questo? Qualcosa in particolare è lento a rispondere?

Se ti stai chiedendo se il tuo disco IO è il collo di bottiglia, userei il comando iostat (parte del pacchetto sysstat) per vedere se il disco è effettivamente sotto carico.

Esempio:

[[email protected]: ~] iostat -x 1 3                                                                                           

avg-cpu:  %user   %Nice %system %iowait  %steal   %idle
           2.38   34.71    2.64    1.18    0.00   59.21 
Device:         rrqm/s   wrqm/s     r/s     w/s   rsec/s   wsec/s avgrq-sz avgqu-sz   await  svctm  %util
sda               0.11    17.35    2.21   20.31    46.57   301.40    15.45     2.27  100.66   1.48   3.34
sda1              0.10    17.31    2.21   20.31    46.48   301.10    15.44     2.27  100.66   1.48   3.34
sda2              0.00     0.00    0.00    0.00     0.00     0.00     3.50     0.00   30.00  30.00   0.00
sr0               0.00     0.00    0.00    0.00     0.00     0.00    18.44     0.00  677.67 512.61   0.00

avg-cpu:  %user   %Nice %system %iowait  %steal   %idle
           6.22    0.00    4.31    0.00    0.00   89.47   
Device:         rrqm/s   wrqm/s     r/s     w/s   rsec/s   wsec/s avgrq-sz avgqu-sz   await  svctm  %util
sda               0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
sda1              0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
sda2              0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
sr0               0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
16
Kyle Brandt

Abilita block_dump registrazione di quali processi stanno eseguendo operazioni di lettura/scrittura a blocchi:

echo 1 > /proc/sys/vm/block_dump
tail -f /var/log/syslog

al termine, disabilitare la traccia in modo da non inviare spam ai file di registro:

echo 0 > /proc/sys/vm/block_dump
0