通过block_dump实时监测LinuxIO

在排查服务器IO繁忙的原因时,需要检查哪个进程在频繁IO。在Linux内核提供了block_dump参数来把block读写(WRITE/READ)情况dump到日志中,这样就可以使用dmesg命令来查看:

sysctl vm.block_dump=1

或者

echo 1 > /proc/sys/vm/block_dump

然后就可以通过dmesg观察到各个进程的IO活动情况

dmesg -c

注意:其中日志中WRITE block 0WRITE block 16, WRITE block 104中的数字表示写到了哪个block 而 不是 写了多少blocks。

统计一段时间以后,可以再关闭blcok_dump功能

sysctl vm.block_dump=0

可以采用如下简单的方法采样3秒钟:

sudo sysctl -w "vm.block_dump=1"; sleep 3; sudo sysctl -w "vm.block_dump=0"

采用如下命令统计当前占用IO最高的10个进程

dmesg |awk -F: '{print $1}'|sort|uniq -c|sort -rn|head -n 10

参考

Last updated