IO问题定位
确定文件消耗进程
1、yum instal -y systat
2、 pidstat -udtl 1 120 > /tmp/pidstat.out #进程级别的写入情况,可以看到每个进程的写入情况
iostat -xkt 1 120 > /tmp/iostat.out #磁盘级别的写入情况,比如有多个磁盘,就能看出每个磁盘的读写情况
3、通过2步骤确定是Java进程产生了大量IO之后,可以通过systetmap 获取每次java进程有写入进程时,stap就会打印出一条信息,包括文件的全路径和写入文件的字节数
将/etc/yum.repos.d/目录下,amzn-main.repo 和amzn-update.repo 两个文件,将amzn-main-debuginfo 和amzn-updates-debuginfo中的enabled=0 改为enabled=1
安装一下软件包
yum install kernel-debuginfo-$(uname -r)
yum install kernel-headers-$(uname -r)
yum install kernel-devel-$(uname -r)
yum install ysstemmap
4、 将下面的systemtap脚本保存为文件monitor_write.stp:
probe vfs.write
{
name = execname();
if (name == @1 && devname == @2) {
full_path = fullpath_struct_file(task_current(), file);
printf("%s %d\n", full_path, bytes_to_write);
}
}
5、 运行如下命令:
sudo stap -v monitor_write.stp java xvdb
当stap命令开始运行后,每当有java进程写xvdb上面的文件,stap就会打印出一条信息,包括文件的全路径和写入文件的字节数。您可以根据stap的输出了解到IO是如何分布在这些文件中的
浙公网安备 33010602011771号