环境相关:
OS:CentOS release 6.9
1. 需求
当系统IO频繁时,想要获取最耗IO的进程信息时,可以使用dstat命令或者其他系统命令,这些命令都是获取系统底层数据然后进行汇总展示。本文介绍打开block_dump,通过查看dmesg信息定位高IO的方法。
2. 具体操作
开启block_dump:
echo 1 > /proc/sys/vm/block_dump
查看dmesg信息,寻找规律:
dmesg -c
# 打印dmesg当前信息后清除缓存中留存的当前信息
# 查看信息,发现有dirtied inode文件句柄占用信息、WRITE block块写入信息等
# 块写入信息就是我们需要分析的信息
使用awk命令做这类信息的几种分析:
dmesg -c|awk '/WRITE block/{a[$1]+=$4}END{for(i in a) print i,a[i]}'|column -t
# 如下方的输出信息截取
# jbd2/sda3-8(315): 211293280
# flush-8:0(705): 355218184
# 第一列是进程名和PID,第二列是当前dmesg信息中,这些进程写入的块的数量
dmesg -c|awk '/WRITE block/{a[$6]+=$4}END{for(i in a) print i,a[i]}'|column -t
# 如下方的输出信息截取
# sda3 2276570920
# 第一列是被写入的设备,第二列是当前dmesg信息中,这些设备写入的块的数量
dmesg -c|awk '/WRITE block/{a[$1" "$6]+=$4}END{for(i in a) print i,a[i]}'|column -t
# 如下方的输出信息截取
# flush-8:0(705): sda3 1836672752
# jbd2/sda3-8(315): sda3 2050043504
# 第一列是进程名和PID,第二列是被写入的设备,第三列是当前dmesg信息中,写入的块的数量
3. 收尾
最后需要手动关闭block_dump功能:
echo 0 > /proc/sys/vm/block_dump
[TOC]