Soluzione 1:
Puoi usare un monitor I/O come iotop, ma ti mostrerà solo processi o thread con operazioni I/O correnti.
Se hai bisogno di sfogliare i processi in attesa di I/O, usa watch per monitorare i processi con il flag STAT 'D' come di seguito:
watch -n 1 "(ps aux | awk '\$8 ~ /D/ { print \$0 }')"
Soluzione 2:
ps axu
e cerca i processi che si trovano nello stato "D". Sulla base della manpage ps(1), i processi che si trovano nello stato D sono in una sospensione ininterrotta, che quasi sempre significa "in attesa di IO". Sfortunatamente, l'arresto di questi processi di solito non è possibile.
Soluzione 3:
La risposta di Zanchey è la migliore che conosco per scoprire cosa sta aspettando IO.
Quando dici che il tuo server è sotto carico elevato, cosa intendi con questo? Qualcosa in particolare è lento a rispondere?
Se ti stai chiedendo se il tuo IO su disco è il collo di bottiglia, userei il comando iostat (parte del pacchetto sysstat) per vedere se il disco è effettivamente sotto carico.
Esempio:
[[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