Solution 1 :
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 avez besoin de 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 }')"
Solution 2 :
ps axu
et recherchez les processus qui sont dans l'état "D". D'après la page de manuel ps(1), les processus qui sont dans l'état D sont en veille ininterrompue, ce qui signifie presque toujours « en attente d'E/S ». Malheureusement, tuer ces processus n'est généralement pas possible.
Solution 3 :
La réponse de Zanchey est la meilleure que je connaisse pour savoir ce qui attend IO.
Quand vous dites que votre serveur est sous forte charge, qu'entendez-vous par là ? Quelque chose en particulier est lent à réagir ?
Si vous vous demandez si votre Disk 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 :
[[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