在新版本的内核,可以用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