千家信息网

Linux下IO监控与分析的案例

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,这篇文章给大家分享的是有关Linux下IO监控与分析的案例的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。1 、系统级IO监控1.1、iostatiostat -xdm 1
千家信息网最后更新 2026年11月03日Linux下IO监控与分析的案例

这篇文章给大家分享的是有关Linux下IO监控与分析的案例的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

1 、系统级IO监控

1.1、iostat

iostat -xdm 1 # 个人习惯

%util 代表磁盘繁忙程度。100% 表示磁盘繁忙, 0%表示磁盘空闲。但是注意,磁盘繁忙不代表磁盘(带宽)利用率高

argrq-sz 提交给驱动层的IO请求大小,一般不小于4K,不大于max(readahead_kb, max_sectors_kb)

可用于判断当前的IO模式,一般情况下,尤其是磁盘繁忙时, 越大代表顺序,越小代表随机

svctm 一次IO请求的服务时间,对于单块盘,完全随机读时,基本在7ms左右,既寻道+旋转延迟时间

1.2、各统计量之间关系

%util = ( r/s + w/s) * svctm / 1000 # 队列长度 = 到达率 * 平均服务时间

avgrq-sz = ( rMB/s + wMB/s) * 2048 / (r/s + w/s) # 2048 为 1M / 512

1.3、总结

iostat 统计的是通用块层经过合并(rrqm/s, wrqm/s)后,直接向设备提交的IO数据,可以反映系统整体的IO状况,但是有以下2个缺点:

  • 距离业务层比较遥远,跟代码中的write,read不对应(由于系统预读 + pagecache + IO调度算法等因素, 也很难对应)

  • 是系统级,没办法精确到进程,比如只能告诉你现在磁盘很忙,但是没办法告诉你是谁在忙,在忙什么?

2 、进程级IO监控

2.1、 iotop 和 pidstat (仅rhel6u系列)

iotop 顾名思义, io版的top

pidstat 顾名思义, 统计进程(pid)的stat,进程的stat自然包括进程的IO状况

这两个命令,都可以按进程统计IO状况,因此可以知道:

1)当前系统哪些进程在占用IO,百分比是多少?

2)占用IO的进程是在读?还是在写?读写量是多少?

pidstat 参数很多,介绍几个比较常用的:

pidstat -d 1 #只显示IO

pidstat -u -r -d -t 1
  • # -d IO 信息,

  • # -r 缺页及内存信息

  • # -u CPU使用率

  • # -t 以线程为统计单位

  • # 1 1秒统计一次

  • iotop, 很简单,直接敲命令

2.2、block_dump, iodump

iotop 和 pidstat 都依赖于/proc/pid/io文件导出的统计信息, 这个对于老一些的内核是没有的,比如rhel5u2。

因此只好用以上2个命令来替代:

echo 1 > /proc/sys/vm/block_dump # 开启block_dump,此时会把io信息输入到dmesg中

# dmesg

watch -n 1 "dmesg -c | grep -oP "w+(d+): (WRITE|READ)" | sort | uniq -c"

# 不停的dmesg -c

echo 0 > /proc/sys/vm/block_dump # 不用时关闭

2.3、总结

从进程级IO监控 ,可以看出:

  • 系统级IO监控不能回答的2个问题

  • 距离业务层相对较近(例如,可以统计进程的读写量)

但是也没有办法跟业务层的read,write联系在一起,同时颗粒度较粗,没有办法知道当前进程读写了哪些文件? 耗时? 大小 ?

3、 业务级IO监控

3.1、ioprofile

ioprofile 命令本质上是 lsof + strace,

ioprofile 可以解决以下三个问题:

  • 当前进程某时间内,在业务层面读写了哪些文件(read, write)?

  • 读写次数是多少?(read, write的调用次数)

  • 读写数据量多少?(read, write的byte数)

3.2、实例

假设某个行为会触发程序一次IO动作,例如: "一个页面点击,导致后台读取A,B,C文件"

./io_event # 假设模拟一次IO行为,读取A文件一次, B文件500次, C文件500次

ioprofile -p `pidof io_event` -c count # 读写次数

ioprofile -p `pidof io_event` -c times # 读写耗时

ioprofile -p `pidof io_event` -c sizes # 读写大小

注: ioprofile 仅支持多线程程序,对单线程程序不支持. 对于单线程程序的IO业务级分析,strace足以。

3.3、总结

ioprofile本质上是strace,因此可以看到read,write的调用轨迹,可以做业务层的io分析。

4 、文件级IO监控

文件级IO监控可以配合/补充"业务级和进程级"IO分析

文件级IO分析,主要针对单个文件, 查看当前哪些进程正在对某个文件进行读写操作.

  • lsof 或者 ls /proc/pid/fd

  • inodewatch.stp

4.1、lsof

查看当前文件由哪些进程打开

lsof ../io # io目录 当前由 bash 和 lsof 两个进程打开

lsof 命令 只能查看静态的信息, 并且"打开" 并不一定"读取", 对于 cat ,echo这样的命令, 打开和读取都是瞬间的,lsof很难捕捉

4.2、inodewatch.stp

可以用 inodewatch.stp 来弥补

stap inodewatch.stp major minor inode # 主设备号, 辅设备号, 文件inode节点号  stap inodewatch.stp 0xfd 0x00 523170 # 主设备号, 辅设备号, inode号,可以通过 stat 命令获得

感谢各位的阅读!关于"Linux下IO监控与分析的案例"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

进程 文件 监控 业务 统计 命令 磁盘 分析 系统 信息 繁忙 代表 办法 时间 程序 线程 大小 次数 状况 设备 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 中智农互联网科技 华服互联网科技怎么样 互联网科技活动banner 科技和互联网公司 互联网科技美容 上海卓越科技 互联网 互联网科技大会案例 广西拼得多互联网科技有限公司 青岛中康互联网医疗科技有限公司 天速互联网络科技有限公司 央行互联网金融科技公司 现代互联网科技股 互联网时代的科技公司 互联网金融科技公司的优势 江苏苏星互联网科技有限公司 容联科技互联网电商 青岛易易互联网科技 陕西彩京云互联网科技有限公司 互联网企业和网络科技有限公司 株洲百竞科技的互联网营销顾问 广州淘业互联网络科技 高科技互联网 互联网科技英文 嘟嘟瓜互联网科技 哈尔滨秒房互联网科技有限公司 厦门比较好的科技互联网公司 四川互联网展示科技馆设计 上海创道互联网络科技有限公司 广州三三互联网科技有限公司 互联网的科技体现在哪里
0