ディスクIOで悩む時、どのプロセスがIOを出しているのか分らないときがある。
CentOS 5.4 以降、/proc/[PID]/io というファイルが有って、ここにプロセスがどんだけI/Oを出したか分るようになっている。
参考URL <http://www.sssg.org/blogs/naoya/archives/1562
>
以下のコマンドでも打てる。sysstatやdstatを入れる必要がある。
pidstat -d
dstat -M topbio -al
(ただしdstat はver0.6.7以降)
/proc/[PID]/io の書式というか例はこんな感じ。
rchar: 1304456
wchar: 7493
syscr: 2825
syscw: 20
read_bytes: 110592
write_bytes: 16384
cancelled_write_bytes: 0
以下URLによると、read_bytes と、write_bytes が、ストレージアクセス発生したIOのようです。
<http://stackoverflow.com/questions/3633286/understanding-the-counters-in-proc-pid-io
>
これでIOの出元を調べられる!
何らかの理由でpidstat も、dstatも、iotopも、何も使えない人へ。
/proc/[PID]/io ファイルを全部見るのは大変なので、
とりあえず、bash でPID write_bytes をsortする一文を書きました。
for file in `ls /proc/*/io`; do echo $file `cat $file |egrep ^write_bytes |awk '{print $NF}'`; done | sort -k 2 -r -n
こんな感じでPIDを特定して、grep してps 打てばどのプロセスか分かるはずです。例えば、
ps ax |grep PID
とかです。
CentOS 5.4 以降、/proc/[PID]/io というファイルが有って、ここにプロセスがどんだけI/Oを出したか分るようになっている。
参考URL <http://www.sssg.org/blogs/
以下のコマンドでも打てる。sysstatやdstatを入れる必要がある。
pidstat -d
dstat -M topbio -al
(ただしdstat はver0.6.7以降)
/proc/[PID]/io の書式というか例はこんな感じ。
rchar: 1304456
wchar: 7493
syscr: 2825
syscw: 20
read_bytes: 110592
write_bytes: 16384
cancelled_write_bytes: 0
以下URLによると、read_bytes と、write_bytes が、ストレージアクセス発生したIOのようです。
<http://stackoverflow.com/
これでIOの出元を調べられる!
何らかの理由でpidstat も、dstatも、iotopも、何も使えない人へ。
/proc/[PID]/io ファイルを全部見るのは大変なので、
とりあえず、bash でPID write_bytes をsortする一文を書きました。
for file in `ls /proc/*/io`; do echo $file `cat $file |egrep ^write_bytes |awk '{print $NF}'`; done | sort -k 2 -r -n
こんな感じでPIDを特定して、grep してps 打てばどのプロセスか分かるはずです。例えば、
ps ax |grep PID
とかです。