IO負荷の高いプロセスを特定する方法
カーネルの I/O Accounting 機能を利用する
Linuxでカーネルのバージョンが 2.6.20 以降であれば、IO Accounting機能を使うとよい。
これが有効になっていれば、プロセス毎のI/O統計情報が /proc/${pid}/io に出力される。
…が、全プロセスについて、これを自前で分析するのは疲れるので、pidstat や dstat のようなツールを使うのが楽。
iodump
2.6.19 以前のカーネルではどうすればいいか。
例えば、iodump というツールがある。
これは以前 Maatkit に含まれていた Perl スクリプトである。
使い方としては、以下の通り。
# download iodump wget http://maatkit.googlecode.com/svn-history/r5389/trunk/util/iodump # prepare dmesg -c /etc/init.d/klogd stop echo 1 > /proc/sys/vm/block_dump # start reporting while true; do sleep 1; dmesg -c; done | perl iodump Ctrl-C # end reporting # post process echo 0 > /proc/sys/vm/block_dump /etc/init.d/klogd start
iodump を実行し、Ctrl-C を押すと結果が出力され、どのプロセスがI/Oを使っていたかわかる。