最近在做性能测试时,有一台同时运行activemq和mysql的linux服务器cpu1出现iowait达到95%的情况。于是想要定位哪个进程有大量i/o草组。
使用了几个工具,iostat,iodump,每个工具都各有千秋,总结如下。
特点:iostat可统计磁盘使用情况,包括是否处于忙碌状态、每秒读写次数、读写字节大小等。但好像无法定位到时哪个进程有较高的I/O。
应该不是linux自带的工具,因为我见过一些相同版本的Linux服务器有些带有iostat,有些则没有。
可以通过安装sysstat包,包括了iostat,mpstat,sra等工具包。
使用命令:
rpm -ivh sysstat-7.0.2-12.el5.x86_64.rpm
或者更简单(对于yum可用的系统):
yum install sysstat
使用yum安装成功的提示信息:
Installed: sysstat.x86_64 0:7.0.2-12.el5 Complete!
完成安装则可以使用iostat了。
命令:
[root@virt001 man1]# iostat -d -k
输出:
Linux 2.6.18-308.el5xen (virt001) 08/01/2013 Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn xvda 437.62 0.00 4249.50 0 4292 xvda1 437.62 0.00 4249.50 0 4292 xvda2 0.00 0.00 0.00 0 0
说明:
第一行显示磁盘xvda总的信息,下面两行分别说明各分区磁盘I/O信息。
使用-x可显示更多信息。
命令:
[root@virt001 man1]# iostat -c
输出:
Linux 2.6.18-308.el5xen (virt001) 08/01/2013 avg-cpu: %user %nice %system %iowait %steal %idle 7.25 0.02 3.46 2.14 0.09 87.04
更详细命令说明可参考:http://www.orczhou.com/index.php/2010/03/iostat-detail/
在“google code”上有一个工程aspersa,提供了一个工具iodump,可统计每个进程的I/O情况,很方便用来定位产生iowait问题的进程。
下载工具包:wget http://aspersa.googlecode.com/svn/trunk/iodump
具体使用见作者博文:http://www.xaprb.com/blog/2009/08/23/how-to-find-per-process-io-statistics-on-linux/
特点:方便定位cpu产生iowait问题的进程,适用于没有iotop工具包的linux旧版本。作者原话是“Compute per-PID I/O stats for Linux when iotop/pidstat/iopp are not available.”。
使用方法:
1、首先开启与I/O相关的内核消息统计,工具应该是基于这些消息统计数据的。
echo 1 > /proc/sys/vm/block_dump
2、将统计的与I/O相关的内核消息作为工具iodump的输入:
while true; do sleep 1; dmesg -c; done | perl iodump
3、等待运行一段时间,按ctrl + c终止程序运行,得到如下统计信息(单位不清楚,不过信息还是有用):
# Caught SIGINT. TASK PID TOTAL READ WRITE DIRTY DEVICES kjournald 622 187254 0 187254 0 dm-0 mysqld 17505 70996 91 70905 0 dm-0 mysqld 22182 34441 74 34367 0 dm-0 mysqld 22454 30861 44 30817 0 dm-0 mysqld 22227 29812 53 29759 0 dm-0 java 3924 24881 0 24881 0 dm-0 mysqld 21699 13510 3 13507 0 dm-0 mysqld 21513 10334 2 10332 0 dm-0
上述信息简单明了。
4、关闭I/O信息内核统计
echo 0 > /proc/sys/vm/block_dump
这次使用iodump和iostat就定位到时mysql有大量I/O操作。其他工具比如iotop,iopp,dstat就没有使用。有篇文章写得比较详细,链接是:http://www.51testing.com/html/24/n-822524-2.html。