ITPub博客

首页 > IT基础架构 > 服务器/存储 > DISK 100% BUSY,谁造成的?

DISK 100% BUSY,谁造成的?

服务器/存储 作者:fiona8953 时间:2016-11-23 14:04:45 0 删除 编辑

iostat等命令看到的是系统级的统计,比如下例中我们看到/dev/sdb很忙,如果要追查是哪个进程导致的I/O繁忙,应该怎么办?

进程的内核数据结构中包含了I/O数量的统计:

可以直接在 /proc//io 中看到:

我们关心的是实际发生的物理I/O,从上面的注释可知,应该关注 read_bytes 和 write_bytes。请注意这都是历史累计值,从进程开始执行之初就一直累加。如果要观察动态变化情况,可以使用 pidstat 命令,它就是利用了/proc//io 中的原始数据计算单位时间内的增量:

另外还有一个常用的命令 iotop 也可以观察进程的动态I/O:

pidstat 和 iotop 也有不足之处,它们无法具体到某个硬盘设备,如果系统中有很多硬盘设备,都在忙,而我们只想看某一个特定的硬盘的I/O来自哪些进程,这两个命令就帮不上忙了。怎么办呢?可以用上万能工具SystemTap。比如:我们希望找出访问/dev/sdb的进程,可以用下列脚本,它的原理是对submit_bio下探针:

这个脚本需要在命令行参数中指定需要监控的硬盘设备号,得到这个设备号的方法如下:

执行脚本,我们看到:

结果很令人满意,我们看到是进程号为31202的dd命令在对/dev/sdb进行读操作。

Refer to:
http://linuxperf.com/?p=40

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/26477398/viewspace-2128932/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2014-06-13

  • 博文量
    284
  • 访问量
    222482