关键不是跑一次命令,而是用iostat -d -k 2看实时读写速率、iostat -xk 1盯%util和avgqu-sz判断队列压力与设备忙闲、sudo iotop -o定位高io进程,三者协同才能精准诊断磁盘性能问题。

直接在终端里看磁盘读写性能,关键不是“跑一次命令就完事”,而是选对工具、看对字段、结合场景判断。不同系统命令不同,但逻辑一致:区分实时速率、队列压力、设备忙闲、进程归属这四类信息。
Linux:用 iostat 看吞吐与瓶颈
iostat 是最常用也最实用的命令,它不测极限速度,而是告诉你磁盘此刻“真实干了多少活、累不累”。安装后(yum install sysstat 或 apt install sysstat),常用组合如下:
- iostat -d -k 2:每2秒刷新一次,只显示磁盘设备(不含CPU),单位是KB/s,看 rKB/s(读)和 wKB/s(写)两列
- iostat -xk 1:启用扩展模式,每秒刷新,重点盯 %util(设备忙时占比)和 avgqu-sz(平均队列长度)——%util 长期超80%,avgqu-sz 持续大于2(HDD)或大于1(SSD),说明I/O已排队等待
- iostat -xk 1 /dev/sdb:只监控某块外接硬盘(如sdb),避免被其他设备干扰
macOS:用 iostat 查设备级吞吐
macOS 内置 iostat,无需额外安装(若提示未找到,先装 Xcode 命令行工具:xcode-select --install)。它输出更简洁,适合快速抓取速率:
- iostat -d -w 3:每3秒刷新一次设备汇总,找 r_MB/s 和 w_MB/s 列,对应外部硬盘(如 disk2)的实时读写速度
- iostat -w 2:带CPU信息的全量输出,每2秒刷新;关注 rkB/s 和 wkB/s,数值跳动明显即表示有活跃I/O
- 注意:macOS 的 iostat 不支持 -x 扩展参数,所以不提供 %util 或队列深度,需配合活动监视器交叉验证
Linux:用 iotop 定位“谁在狂读狂写”
iostat 告诉你“磁盘很忙”,但不知道是哪个进程干的。这时候用 iotop,它像 top 一样按进程排序实时IO占用:
- sudo iotop -o:只显示当前有I/O活动的进程,省去静默项干扰
- sudo iotop -o -d 1:每秒刷新,方便观察波动
- 启动后按 O(大写O)按IO速率降序排列,一眼看到读/写最高的进程;按 p 切换显示PID而非线程ID,更易关联服务名
通用技巧:dd 测试裸设备极限(慎用)
dd 不反映日常使用状态,而是绕过缓存测物理层能力,适合验证新盘是否达标或排查硬件异常:
- dd if=/dev/zero of=testfile bs=1M count=1024 oflag=direct:测试顺序写,oflag=direct 强制直写磁盘,避开内存缓存
- dd if=testfile of=/dev/null bs=1M iflag=direct:测试顺序读,同样直通设备
- 执行前建议先清缓存:echo 3 | sudo tee /proc/sys/vm/drop_caches(仅Linux)
- 注意:测试会生成大文件,结束后记得 rm testfile











