最常用、最可靠的方式是用 iostat -x 1 实时查看 IOPS(r/s + w/s),同时关注 r_await、w_await 和 %util 判断延迟与饱和情况,并结合 cat /sys/block/sdX/queue/rotational 识别 SSD/HDD 类型,再用 iotop 或 pidstat 定位高 I/O 进程,必要时用 fio 做轻量基准测试验证硬件性能。

直接用 iostat -x 1 就能看到实时 IOPS(读 r/s + 写 w/s),这是最常用、最可靠的方式。
看 IOPS 的核心命令:iostat -x 1
执行后每秒刷新一次,重点关注以下字段:
- r/s:每秒完成的读请求次数
- w/s:每秒完成的写请求次数
- r/s + w/s 就是当前磁盘的总 IOPS
- 同时看 r_await 和 w_await,超过 10ms 说明读/写延迟已偏高
- %util 接近或等于 100%,表示磁盘已饱和,IOPS 可能被限制
确认设备是否为 SSD 或 HDD
IOPS 表现差异大,先识别磁盘类型:
- 查旋转属性:
cat /sys/block/sdX/queue/rotational→ 返回 0 是 SSD,1 是 HDD - SSD 典型随机 IOPS:3万–8万;HDD 通常仅 70–100
- 避免把 SSD 当成 HDD 评估,否则会误判性能瓶颈
定位高 IOPS 的具体进程
iostat 只显示设备级汇总,要查“谁在刷盘”,用:
-
iotop -o:只显示正在做 I/O 的进程,实时排序 I/O 使用率 -
pidstat -d 1:按进程统计每秒读写字节数和 I/O 次数,支持历史采样 - 结合
ps -p PID -o comm=,cmd=可快速确认进程用途
验证 IOPS 是否真实受限于硬件
如果观察到 IOPS 上不去,可做轻量级基准测试排除缓存干扰:
- 随机读 IOPS 测试(绕过缓存):
fio -name=randread -ioengine=libaio -iodepth=32 -rw=randread -bs=4k -direct=1 -size=1G -runtime=30 -group_reporting -filename=/dev/sdX - 结果中 iops 字段即实测值,对比理论值(如 NVMe 应达 10万+)可判断是否正常
- 不建议长期压测生产盘,单次 30 秒足够参考



















