iotop -p pid可精准监控指定进程的实时磁盘i/o行为,配合-o(仅显示活跃io)、-a(累计io量)及非交互模式(-b -d -n)导出日志,是定位io瓶颈最直接有效的方式。

直接用 iotop -p PID 就能聚焦查看指定进程的实时磁盘 I/O 行为,这是定位 IO 大户最精准的方式之一。
快速定位并监控单个进程的 IO 活动
当你已经知道某个高 IO 进程的 PID(比如通过 pidstat -d 或 iotop -o 初步筛选出的),执行:
-
iotop -p 12345:只显示 PID 为 12345 的进程(及其线程,若存在)的读写速率、IO 百分比、实际字节数等 - 加上
-o(如iotop -o -p 12345)可进一步过滤掉静默状态——仅当该进程当前确实在做磁盘读写时才显示,避免干扰 - 加
-a(如iotop -a -p 12345)会显示累计 IO 量(如“Total DISK READ: 2.45 G”),适合判断长期行为而非瞬时峰值
配合 top 或 ps 快速获取目标 PID
如果还不知道哪个进程在狂刷磁盘,先做一轮初筛:
Linux系统管理专家,覆盖12大模块:用户权限、SSH、存储、网络、systemd、防火墙、日志监控、备份恢复、TLS证书、Ansible、容器、IaC。提供配置、验证、加固、监控、备份、自动化、故障排查、回滚闭环。关键词:useradd、sudo、sshd_config、chmod、SEL...
- 运行
iotop -o:只列出正在发生 IO 的进程,一眼扫出 IO% 最高的几个 - 或用
pidstat -d 1 3(需安装 sysstat):每秒采样一次,共 3 次,输出各进程平均 IO 读写字节数,更稳定、适合脚本化分析 - 再结合
ps -p 12345 -o pid,user,comm,args查看该 PID 对应的用户、命令名和完整启动参数,确认是否为预期服务
非交互式导出用于事后分析
想记录某段时间内的 IO 表现(比如排查夜间批量任务):
-
iotop -botq -p 12345 -d 2 -n 10 > io_12345.log:每 2 秒抓一次,共 10 次,不显示交互头、不等待输入、安静退出,结果存入日志 - 日志中每行包含时间戳、PID、用户、I/O rate、IO%、命令,可用
awk或 Excel 提取 IO 波动趋势 - 注意:
-b模式下默认不显示线程,如需线程级数据,加-H(但部分旧版本 iotop 不支持-H与-b共用,建议先测试)
常见误判提醒
别把“IO 高”直接等同于“程序有问题”:
- 数据库刷脏页、日志落盘、备份压缩解压都是合法高 IO 场景
- 观察
%CPU和%IO是否同步飙高:若 CPU 很低但 IO 持续满载,可能是慢盘 + 随机读写导致大量 wait,瓶颈在存储层 - 检查
wa(iowait)在 top 顶部的占比:若 >30%,说明 CPU 大量时间在等磁盘,此时优化方向是减少小文件随机 IO 或升级存储










