CPU 跑满怎么找到真凶
负载高不等于 CPU 忙,先分清用户态、内核态和 IO 等待。同一件事有很多种做法,选哪种取决于你的系统版本和线上是否允许中断。
下面按“先判断范围、再处理、最后防复发”的顺序展开,涉及 CPU 100、top 的关键动作都给了具体做法,可以照着走。
第一眼
top 看 %us 与 %sy 谁高,us 高查应用,sy 高查系统调用。
条件允许的话先在测试环境走一遍,再动生产。
按线程排查
top -Hp 进程号 找最热的线程。
容易踩的坑:常见的坑是只处理表象:症状消失就收工,根因还在,过几天又复发。
历史回溯
sar 或 pidstat 看过去一小时曲线。
动手前先确认影响范围,能局部处理就不要影响整机。
常见来源
死循环、正则回溯、爬虫未限速、编译任务。
常见问题
Q:CPU 100这类问题,最快的判断办法是什么?
先确认现象的范围:只有单台还是全部、只在某个时段还是持续。范围一缩小,原因基本就浮出来了。
Q:按文中的步骤做完,还需要注意什么?
把处理过程和最终生效的参数记下来。同类问题再出现时直接对照记录,比重查一遍快得多。
小结
回到这篇的四个环节:第一眼、按线程排查、历史回溯、常见来源。以上步骤按顺序做完,同类故障基本能自己处理。留一份操作记录,下次能省一半时间。