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