Linux - Come posso vedere cosa sta aspettando l'IO del disco


42

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

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? Lo so, iotopma questo mostra cosa sta attualmente facendo IO.

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

Risposte:


47

È 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 }')"

Dolce. Questo mi ha aiutato bene.
Stu Thompson,

2
In alternativa, puoi usare il comando 'iotop -o' che mostrerà solo 'processi o thread che stanno effettivamente eseguendo I / O' come da iotop --help.
Ryan,

1
@Ryan Oltre a non fornire le iowaitinformazioni richieste , iotoprichiede privilegi elevati. watch, pse awkfornire solo le informazioni necessarie e non richiedono privilegi elevati.
Rich

4
Avrei usato psi flag POSIX e li avrei stampati awkdiversamente: watch "(ps -eo stat,pid,comm|awk '(NR==1)||(\$1~/D/){print}')"- in questo modo si ottengono le intestazioni di colonna e stat, pid e command.
Rich

18

ps axue 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 modalità di sospensione ininterrotta, il che significa quasi sempre "in attesa di IO". Sfortunatamente, uccidere questi processi di solito non è possibile.


16

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 IO del disco è il collo di bottiglia, userei il comando iostat (parte del pacchetto sysstat) per vedere se il disco è effettivamente sotto carico.

Esempio:

[kbrandt@kbrandt-opadmin: ~] 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

1
Sarebbe utile spiegare come interpretare l'output di iostat "per vedere se il disco è effettivamente sotto carico pesante".
Scott Buchanan,

0

Abilita la registrazione block_dump 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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.