您的位置:首页 > 运维架构 > Linux

linux 下进程io分析(dmesg相关、block_dump相关)

2018-01-03 13:15 274 查看
环境相关:

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]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  linux shell