当前位置:首页>Linux>CPU 飙升!救火指南:Linux 管理员如何冷静排查高负载?

CPU 飙升!救火指南:Linux 管理员如何冷静排查高负载?

  • 2026-10-10 16:51:30
CPU 飙升!救火指南:Linux 管理员如何冷静排查高负载?
正文内容Reading Time: 6 min
挂了!CPU 飙到 90%+?Linux 管理员的实战高 CPU 诊断指南(不慌)
运维工程师的日常里,你大概率听过这样的告警:
“服务器 CPU 使用率 90%+,快看看!”
这时候,产品、业务、甚至老板齐刷刷盯着你:
•
它是不是要挂了?
•
会不会影响线上业务?
•
什么时候能搞定?
你登录服务器,打开 top,看着数字一秒一刷新……
但很多时候,你还是 一脸茫然。
其实,当 CPU 飙高时,工具展示给你的往往只是结果,而不是原因。
这篇文章给你一套不慌、不乱、能在生产环境直接用的高 CPU 排查思路。
◆ ◆ ◆
为什么光靠 top 很容易误判?
很多人的第一反应是:
“CPU 占用高,肯定是有进程在疯狂吃 CPU。”
但现实是:并不一定。
top 看到的只是一个“综合结果”,可能隐藏着完全不同的根因:
•
CPU 真的在算东西(用户态高)
•
CPU 在等磁盘或网络(IO 等待)
•
内核在忙(系统态高)
•
虚拟机被宿主机抢走时间片(steal 高)
一句话总结:
👉 top 告诉你“看起来很忙”,但没告诉你“在忙什么”。
◆ ◆ ◆
三步法:高 CPU 的稳定诊断流程(生产可用)
下面这套流程,适合告警现场、线上环境、时间紧张的情况。
◆ ◆ ◆
✅ Step 1:先搞清楚“是哪种高 CPU”
第一步别急着找进程,先用:
vmstat 1 5
你会看到类似这样的输出(重点在最后几列):
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu----- r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
关注这些字段:
| 字段 | 含义                 || -- | ------------------ || us | 用户态 CPU(程序真正算)     || sy | 内核态 CPU            || wa | CPU 在等 IO(磁盘 / 网络) || st | 虚拟化环境中被抢走的 CPU 时间  |
⚠️ 一个常见误区:
wa 很高 ≠ CPU 忙,而是 CPU 在“干等”。
◆ ◆ ◆
✅ Step 2:还原问题发生时的真实现场
很多时候,你登录服务器时:
•
CPU 已经不高了
•
现场已经“消失”
这时候不要慌,直接查历史:
sar -u 1 5
或者查看历史日志:
sar -u -f /var/log/sa/saXX
你要回答的不是“现在怎么样”,而是:
•
CPU 是什么时候开始飙的?
•
是短暂 spike,还是持续高?
•
当时是 user 高,还是 wa 高?
📌 历史数据比现场截图更重要。
◆ ◆ ◆
✅ Step 3:确认“到底是谁干的”
如果 CPU 当前仍然偏高,可以快速定位:
ps -eo pcpu,pid,user,args | sort -k1 -r | head
如果你怀疑是:
•
线程竞争
•
锁冲突
•
上下文切换过多
可以进一步看:
pidstat -wt 2 5
有些系统“慢”的原因,并不是计算,而是频繁切换任务。
◆ ◆ ◆
一个真实案例:CPU 高,其实 CPU 并不忙
线上一台生产虚拟机告警:
•
CPU 使用率:98%
•
Load Average:12+
业务团队已经开始紧张。
但实际排查发现:
•
用户态 CPU 并不高
•
vmstat 显示 wa 超过 60%
回溯历史后发现:
•
高 CPU 时间点,正好和备份任务重合
•
云磁盘 IO 被限流
•
CPU 只是一直在等磁盘返回
最终处理方式:
👉 将备份任务挪到业务低峰
👉 问题立刻消失
📌 结论:高 CPU ≠ CPU 有问题。
◆ ◆ ◆
总结|真正成熟的运维,是不被告警带节奏
当你再遇到 “CPU 飙高”:
•
❌ 不要只盯着 top
•
✅ 先判断类型(us / sy / wa / st)
•
✅ 再结合历史数据还原现场
•
✅ 最后才去找进程和根因
CPU 告警只是一个信号,不是答案。
运维水平的差距,不在命令多少,
在于你是否知道 下一步该看什么。
THE END

最新文章

随机文章