50 votes

Linux - Comment puis-je voir ce qui est en attente d'IO sur le disque ?

J'ai un serveur qui a une charge très élevée. Rien ne me saute aux yeux en termes d'utilisation du CPU, et il n'y a pas de swapping.

Je pense que c'est parce que certains processus sont en attente d'une IO disque, et je veux voir ce qui est en attente.

Existe-t-il un programme qui m'indique les processus qui attendent l'OI ? Je connais iotop mais cela montre ce que fait actuellement l'OI.

Ou s'agit-il d'une question idiote ? (Si oui, expliquez comment :) )

59voto

Ali Mezgani Points 3770

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

Si vous avez besoin de parcourir les processus en attente d'E/S, utilisez watch pour surveiller les processus avec le drapeau STAT 'D' comme ci-dessous :

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

21voto

Kyle Brandt Points 81077

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

Lorsque vous dites que votre serveur est fortement sollicité, qu'entendez-vous par là ? Quelque chose en particulier est lent à répondre ?

Si vous vous demandez si votre IO disque est le goulot d'étranglement, j'utiliserais la commande iostat (qui fait partie du paquet sysstat) pour voir si le disque est réellement soumis à une 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

18voto

Zanchey Points 3021

ps axu et rechercher les processus qui sont dans l'état "D". En fonction de l'état Page de manuel ps(1) Les processus qui sont dans l'état D sont en sommeil ininterrompu, ce qui signifie presque toujours "en attente d'IO". Malheureusement, il n'est généralement pas possible de tuer ces processus.

3voto

snuggles Points 196

Activer bloc_dump l'enregistrement des processus qui effectuent des opérations de lecture/écriture de blocs :

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

lorsque c'est fait, désactivez le traçage afin de ne pas spammer vos fichiers journaux :

echo 0 > /proc/sys/vm/block_dump

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X