很多时候发现linux系统输入一些命令很慢,用top查看IOwait占用CPU很高,top下面列出的进程中,不论按cpu排序、内存排序、时间排序,都看不出来到底哪个进程(哪个分区)占用ipwait最高。那么到底怎么知道是哪个进程导致iowait过高?系统日志是没有记录这些内容的,但是内核中有相应的方式。。看一下介绍我们首先想个办法让iowait上来,可以用dd,也可以用cp,下面一个简单的脚本:如果使用block_dump那么需要关闭syslog,否则klog会打印很多日志到messages中,这样更加让系统不堪重负。打开block dump:统计方法:网上有人写了一个perl脚本来处理输出,能得到更直观的结果:参考:http://www.xaprb.com/blog/2009/08/23/how-to-find-per-process-io-statistics-on-linux/下载地址:http://aspersa.googlecode.com/svn/trunk/iodump这是一个perl脚本,原理是:将dmesg清空,然后统计1秒内dmesg所dump的block信息。上面这个结果已经很清楚了,最高的就是cp产生的,说明cp在大概1秒钟之内读写最多,达到1051次那么造成iowait的罪魁祸首就是cp了。当然应该多执行几次能得到更精确的结果,有可能是“协助作案”呢。另:为什么kjournald最多而不“验证”一下这个进程呢?这进程是干什么的?搜索一下,ext3文件系统日志相关。这个进程正常。测试完毕不要忘记关掉block_dump和启动syslog:
12-04 11:27