服务器卡顿但CPU正常的真实排查过程:问题其实在磁盘IO
今天遇到一个比较典型但容易误判的问题:服务器明显卡顿,但CPU却是正常的。
网站访问延迟变高,后台操作也有延迟,但进入服务器一看,CPU并没有异常。
这种情况如果只看CPU,很容易误判。
一、问题表现
当时服务器的情况是:
-
网站打开变慢
-
后台操作有延迟
-
SSH登录有轻微卡顿
-
CPU占用正常(30%以内)
-
内存也正常
👉 第一眼看完全不像“服务器负载问题”
二、第一步:排除CPU和内存问题
先用基础命令确认:
top
结果:
-
CPU没有异常
-
内存也没有爆满
-
swap未明显使用
👉 基本排除CPU/内存问题
三、第二步:开始怀疑磁盘IO
因为CPU正常但系统卡顿,这种情况一般有两个方向:
-
网络问题
-
磁盘IO问题
我先排除网络:
ping 8.8.8.8
延迟正常,没有丢包。
👉 网络问题排除
四、第三步:检查磁盘IO状态
使用IO监控工具:
iostat -x 1
发现一个明显异常:
👉 磁盘读写延迟非常高(%util接近100%)
同时:
-
await时间明显偏高
-
svctm增加
-
IO等待时间占比很大
五、问题真正原因
继续分析后确认:
👉 大量日志写入 + 数据库频繁读写
👉 导致磁盘IO持续满载
👉 系统在等待磁盘响应
简单来说就是:
CPU在等磁盘,而不是在计算
六、临时处理方法
为了先恢复网站,我做了几个操作:
1. 清理大日志文件
rm -rf /var/log/*.log
2. 重启数据库服务
systemctl restart mysql
3. 重启Nginx
systemctl restart nginx
七、恢复效果
处理完成后:
-
网站卡顿明显消失
-
后台响应恢复正常
-
SSH操作流畅
-
IO等待下降
八、后续优化措施
为了避免再次出现类似问题,我做了:
-
日志按天切割
-
限制数据库写入频率
-
定期清理临时文件
-
监控磁盘IO状态
九、这次问题的核心结论
很多人看到“服务器卡”第一反应是:
-
CPU不够
-
内存不够
-
被攻击
但实际情况是:
👉 磁盘IO才是隐藏瓶颈
📌 总结一句话
服务器卡顿但CPU正常,大概率是:
👉 磁盘IO过高导致系统在等待数据响应