iotop常空白因权限不足、内核未启用taskstats、-o仅显示实时io进程、容器/cgroup v2聚合统计;推荐sudo iotop -o -p -d1,重点关注io>和disk write列。

直接用 sudo iotop -o -P 就能快速揪出真正吃磁盘的进程,但前提是它得“看得见”——权限、内核支持、参数搭配缺一不可。
为什么 iotop 常常一片空白?
不是命令错了,而是环境没配对:
- 必须用 root 权限运行,普通用户即使加 sudo,若未授予 CAP_SYS_ADMIN 能力,/proc/*/io 读取会静默失败
- 内核需启用 taskstats:执行
zcat /proc/config.gz 2>/dev/null | grep -i taskstats,无输出说明该功能未编译进内核(常见于最小化安装的 CentOS/RHEL/AlmaLinux) - -o 参数只显示“此刻正在读写”的进程,刚写完日志正空闲的服务不会出现——这不是 bug,是设计逻辑
- 容器环境或 cgroup v2 下,部分进程的 IO 可能被聚合统计,宿主机视角看到的不是其真实限制后用量
最实用的启动组合:sudo iotop -o -P -d1
这是日常排查中最稳、最不易误判的用法:
- -o:过滤掉静默进程,避免被大量“挂机但没读写”的条目干扰
- -P:只显示进程(PID),不展开线程(TID),方便对应到业务服务(比如看到 nginx 而不是一堆 worker 线程)
- -d1:每秒刷新一次,节奏适中,既不过载也不滞后
重点关注两列:IO>(I/O 等待时间占比)和 DISK WRITE(或 READ)。有些高频小文件刷盘的进程带宽不高,但 IO> 可能飙到 90%+;数据库、日志轮转、备份任务通常在 WRITE 列占绝对主导。
交互操作与排序技巧
进入界面后不用退出重跑,几个快捷键就能切换视角:
- 按 Shift+P:按 IO> 百分比降序排列——比默认按带宽更敏感,适合发现“低吞吐高延迟”的隐形瓶颈
- 按 P:切换显示 PID(而非 TID),让进程归属一目了然
- 按 O(大写 O):再次触发 -o 过滤,确保只看活跃项
- 按 q:干净退出,不中断其他操作
批量模式抓快照:脚本友好型用法
远程登录、容器内、或需要写入日志时,用 -b(batch mode):
-
sudo iotop -b -n 1 -o -P:只输出当前快照一次就退出,不卡住终端 - 配合 awk 提取关键信息,例如筛选 IO> > 5% 的进程:
sudo iotop -b -n 1 -o -P | awk '$11 ~ /^[0-9]/ && $11 > 5 {print $1, $11, $12}' - 注意字段偏移可能因版本变化:用
iotop --version查版本,iotop -h看列顺序;新版本(如 1.3+)第 11 列通常是 IO>,老版本可能在第 10 列











