web-dev-qa-db-fra.com

Linux - Comment puis-je voir ce qui attend le disque IO

J'ai un serveur qui a une charge très élevée. Rien ne me saute aux yeux en termes d'utilisation du processeur, et ce n'est pas un échange.

Je pense que c'est parce que certains processus attendent les E/S disque, et je veux voir ce qui attend.

Existe-t-il un programme qui me montrera quels processus attendent les E/S? Je connais iotop mais cela montre ce qui fait actuellement IO.

Ou est-ce une question stupide? (Si oui, expliquez comment :))

42
Rory

Vous pouvez utiliser un moniteur d'E/S comme iotop, mais il ne vous montrera que les processus ou les threads avec les opérations d'E/S en cours.

Si vous devez parcourir les processus en attente d'E/S, utilisez watch pour surveiller les processus avec l'indicateur STAT 'D' comme ci-dessous:

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

ps axu et recherchez les processus qui sont à l'état "D". Sur la base de la page de manuel ps (1) , les processus qui sont dans l'état D sont en veille sans interruption, ce qui signifie presque toujours "en attente d'E/S". Malheureusement, il n'est généralement pas possible de tuer ces processus.

18
Zanchey

La réponse de Zanchey est la meilleure que je connaisse pour savoir ce qui attend IO.

Lorsque vous dites que votre serveur est sous forte charge, que voulez-vous dire par là? Quelque chose en particulier tarde à répondre?

Si vous vous demandez si votre disque IO est le goulot d'étranglement, j'utiliserais la commande iostat (qui fait partie du package sysstat) pour voir si le disque est réellement sous forte charge.

Exemple:

[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
16
Kyle Brandt

Activer block_dump enregistrement de quels processus effectuent des opérations de lecture/écriture de bloc:

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

une fois terminé, désactivez le suivi afin de ne pas spammer vos fichiers journaux:

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