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是如何分布在这些文件中的

 

posted @ 2018-07-23 09:34  姚果果  阅读(193)  评论(0)    收藏  举报