Lösung 1:
Sie können einen E/A-Monitor wie iotop verwenden, aber er zeigt Ihnen nur Prozesse oder Threads mit aktuellen E/A-Operationen.
Wenn Sie Prozesse durchsuchen müssen, die auf E/A warten, verwenden Sie watch, um Prozesse mit dem STAT-Flag 'D' wie unten zu überwachen:
watch -n 1 "(ps aux | awk '\$8 ~ /D/ { print \$0 }')"
Lösung 2:
ps axu
und suchen Sie nach Prozessen, die sich im "D"-Zustand befinden. Basierend auf der ps(1)-Manpage befinden sich Prozesse, die sich im D-Zustand befinden, im ununterbrechbaren Ruhezustand, was fast immer „Warten auf IO“ bedeutet. Leider ist es normalerweise nicht möglich, diese Prozesse zu beenden.
Lösung 3:
Zancheys Antwort ist die beste, die ich kenne, um herauszufinden, was auf IO wartet.
Wenn Sie sagen, dass Ihr Server unter hoher Last steht, was meinen Sie damit? Etwas Bestimmtes reagiert nur langsam?
Wenn Sie sich fragen, ob Ihr Festplatten-IO der Engpass ist, würde ich den iostat-Befehl (Teil des sysstat-Pakets) verwenden, um zu sehen, ob die Festplatte tatsächlich stark ausgelastet ist.
Beispiel:
[[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