深色模式
磁盘 IO 观测 iostat/iotop
摘要:系统卡顿但 CPU 空闲?很可能是磁盘 IO 打满。本文用 iostat 看设备吞吐,用 iotop 找是哪个进程在狂写。前提:安装 sysstat 与 iotop。
适用环境
bash
iostat --version 2>/dev/null || (apt install -y sysstat 2>/dev/null || yum install -y sysstat)
which iotop || (apt install -y iotop 2>/dev/null || yum install -y iotop)1
2
2
一、看设备级 IO
bash
iostat -x 1 3 # 扩展统计,每秒一次共 3 次
# 关注 %util(设备繁忙度,近 100% 即瓶颈)
# await(平均等待 ms)、r/s w/s(读写次数)、rkB/s wkB/s(吞吐)1
2
3
2
3
二、找高 IO 进程
bash
iotop -o # 只看有 IO 的进程(-o 省噪声)
# 列:DISK READ / DISK WRITE / IO>
# 找到持续排前的进程 PID 与命令1
2
3
2
3
三、结合 pid 看详情
bash
pidstat -d 1 3 # 按进程看 IO(sysstat 提供)
# 对应进程读写了哪些文件:
lsof -p <PID> | grep REG # 列出该进程打开的普通文件1
2
3
2
3
验证
- [ ]
iostat -x能读出%util接近 100% 的设备 - [ ]
iotop -o能锁定高 IO 的进程名 - [ ] 能用 pidstat/lsof 进一步下钻
常见坑
- %util 高但吞吐低:可能是大量随机小 IO(如数据库),要看 await 而非仅吞吐。
- iotop 需 root:普通用户看不到别人进程的 IO 列。
- 云盘有突发:云盘基线+突发,短时 %util 高不一定持续瓶颈。
- 缓存干扰:写先落 page cache,真正落盘时机看
vmstat的 bo 与 iostat 配合。