psコマンドのSTATの値からIOによって待たされてるプロセスを探す
man psすると下記のように定義されてpsコマンドでプロセスの状態を知る事が出来ます。
プロセスの状態コード s, stat, state 出力指定子 (ヘッダ "STAT" または "S") がプロセス状態の説明のために表示する値を以下に示す。 D 割り込み不可能なスリープ状態 (通常 IO 中) R 実行中または実行可能状態 (実行キューにある) S 割り込み可能なスリープ状態 (イベントの完了を待っている) T ジョブ制御シグナルまたはトレースされているために停止中の状態 W ページング状態 (2.6.xx カーネルからは無効) X 死んだ状態 (見えるべきではない) Z 終了したが、親プロセスによって回収されなかった、消滅した (ゾンビ) プロセス BSD 形式で stat キーワードが用いられたときは、以下の添付文字が表示されることがある。 < 優先度の高いプロセス (他のユーザーに対して良くない) N 優先度の低いプロセス (他のユーザーに対して良い) L 実メモリのページをロックして利用している (リアルタイム処理やカスタム IO 向け) s セッションリーダ l マルチスレッド化されている (NPTL pthreads が行うように、CLONE_THREAD が使われている) + フォアグラウンドのプロセスグループに含まれている
そして、例えば下記のようにIO原因で処理が進んでないプロセスを
STATがDであるものとして探す事が出来ます。
# ps auxw | grep " D" | grep -v grep oracle 9042 43.7 31.1 6303720 5033112 ? Ds 12:05 22:27 oraclexxxx (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))