拒绝背锅!服务器卡顿CPU却空闲?一文揪出磁盘I/O这个“隐形杀手”
大家好,我是三味。
最近在技术群里(QQ群:949793437),有位朋友提出了一个非常经典的问题:
“AlmaLinux 9.7 系统,怎么看磁盘的负载?我担心磁盘影响性能,只会用 uptime 和 df 够吗?”
这简直是灵魂发问!
很多时候,我们发现服务器 Load Average(平均负载)飙高,应用响应变慢,但一看 CPU 使用率(User%)却只有 5%,内存也还剩一大把。这时候,如果你只会 top,可能就真的束手无策了。
其实,90% 的“诡异卡顿”都源于它——磁盘 I/O(输入/输出)瓶颈。
今天三味就带大家抛弃那些“花架子”,用最硬核的命令,把磁盘负载看个通通透透。

1. 为什么 top 可能会骗你?
我们习惯性敲下 top,通常只盯着 CPU 的 us(用户空间)和 sy(内核空间)。但请往右上角看,那里藏着一个关键指标:%wa (I/O Wait)。
%wa是什么?
它代表 CPU 处于“空闲”状态,但之所以空闲,是因为它发出了磁盘读写请求,正在苦苦等待磁盘把数据传回来。- 警报线:
如果%wa长期超过 10% 甚至更高,别怀疑,你的磁盘已经成为整个系统的短板了!CPU 再快也没用,全堵在硬盘上了。
注意: 很多朋友喜欢用增强版的
htop,但默认的htop界面居然不显示 %wa!你需要按F2->Meters->CPU-> 切换样式,才能看到这个关键指标。这里是个大坑,要注意!
2. 神器一:iostat —— 宏观透视眼
top 只能告诉你“磁盘有问题”,但不能告诉你“哪块磁盘有问题”。这时候,必须请出 sysstat 包里的 iostat。
这是三味最推荐的起手式:
iostat -dx 1
-d:只看磁盘,不看CPU。-x:显示扩展的详细数据(这一步最关键)。1:每秒刷新一次。
看到满屏数据别慌,只盯这三个核心指标:
%util(最重要的指标):
表示磁盘设备的利用率。如果这个值持续接近 100%,说明磁盘已经满负荷运转,IO请求已经开始排队,它就是系统的瓶颈!await:
IO请求的平均等待时间(毫秒)。- SSD 正常应该在 1ms 以内。
- 机械硬盘 5-10ms 算正常。
- 如果
await飙升到 100ms 甚至更高,你的数据库绝对在“卡顿”。
r/s和w/s:
每秒的读写次数(IOPS)。结合业务量来看,判断是否超出了磁盘的物理极限。
3. 神器二:iotop —— 谁是罪魁祸首?
知道了磁盘忙,但到底是哪个进程在疯狂读写?是 MySQL 在刷盘?还是日志进程在发疯?还是有人在偷偷挖矿?
iostat 看不到进程,这时候要用 iotop。
(如果没安装:dnf install iotop)
推荐用法:
iotop -oP
-o:只显示正在产生 I/O 的进程(过滤掉不干活的)。-P:只显示进程,不显示线程(让视图更清爽)。
怎么看?
直接看 DISK WRITE 和 DISK READ 列,谁排第一,谁就是把磁盘打满的元凶!选中它,你就找到了优化的目标。
4. 神器三:dstat —— 全能指挥官
如果你想把 CPU、磁盘、网络放在一起看关联,dstat 是最炫酷的工具(AlmaLinux 9 可能需要通过 EPEL 安装)。
dstat -cdngy 1
这种上帝视角能让你发现有趣的关联:比如,是不是网络流量(Net)进来的瞬间,磁盘写(Disk)突然飙高,紧接着 CPU 等待(Wait)上升?这就是全链路分析的魅力。
兄弟们,下次服务器卡顿时,别只盯着 CPU 看了。
- 先看
top的%wa,判断是否有 I/O 等待。 - 再用
iostat -dx 1确认磁盘利用率%util和响应时间await。 - 最后用
iotop -oP揪出那个疯狂读写磁盘的进程。
这三板斧下去,99% 的磁盘性能问题都将无所遁形。
技术之路,贵在知其然,更知其所以然。
如果你觉得这篇文章让你学到了真东西:
- 关注我的公众号 [爱三味],我不发水文,只讲实战。
- 转发给身边的运维和开发朋友,帮他们省去排查问题的几个通宵。
- 加入我们的技术交流


浙公网安备 33010602011771号