在linux下统计每个进程所占用的io数

来源:网络发布时间:2010-09-29

  在新版本的内核,可以用iotop来实时的看到io的情况.但是在老版本的内核没有此工具,怎么办呢从网上搜了下,还是有办法的。

  1:下载一个叫iodump的软件

  wget http://maatkit.googlecode.com/svn/trunk/util/iodump

  2:echo 1 > /proc/sys/vm/block_dump

  打开内核关于io的信息.

  3:while true; do sleep 1; dmesg -c; done | perl iodump (运行一会,然后cancel掉这个命令)

  TASK PID TOTAL READ WRITE DIRTY DEVICESfirefox 4450 4538 251 4287 0 sda4, sda3kjournald 2100 551 0 551 0 sda4firefox 28452 185 185 0 0 sda4kjournald 782 59 0 59 0 sda3pdflush 31 30 0 30 0 sda4, sda3syslogd 2485 2 0 2 0 sda3firefox 28414 2 2 0 0 sda4, sda3firefox 28413 1 1 0 0 sda4firefox 28410 1 1 0 0 sda4firefox 28307 1 1 0 0 sda4firefox 28451 1 1 0 0 sda4 这个可以分析出一段时间内那个进程所占用的io数比较高。 有的热心的网友直接贴出来了脚本:

  #!/bin/sh

  dmesg -c

  /etc/init.d/klogd stop

  echo 1 > /proc/sys/vm/block_dump

  # allow 30 seconds of stats to be logged

  sleep 30

  dmesg -c | perl iodump

  echo 0 > /proc/sys/vm/block_dump

  /etc/init.d/klogd start

  4:或者用一种更简单的方法,不用下载iodump

  dmesg | egrep "READ|WRITE|dirtied" | egrep -o '([a-zA-Z]*)' | sort | uniq -c | sort -rn | head