生产 CPU 过高时,第一反应不要只重启。更稳的做法是先保留现场,再判断是代码、流量、依赖还是机器资源问题。
先确认影响范围
排查前先看:
- 哪台机器 CPU 高。
- 是否所有节点都高。
- 从什么时候开始。
- 是否伴随发布。
- 是否伴随流量上涨。
- 是否有错误率升高。
单节点高和全局高,排查方向完全不同。
保留线程现场
Java 服务常见排查步骤:
- 用
top或监控确认高 CPU 进程。 - 查看进程内线程 CPU。
- 导出线程栈。
- 把高 CPU 线程 ID 转成十六进制。
- 在线程栈里定位对应线程。
这样能判断是死循环、频繁 GC、锁竞争,还是某个业务方法持续占用 CPU。
结合日志和流量
只看线程栈不够,还要看:
- 访问量是否突增。
- 某个接口是否变慢。
- 错误日志是否集中。
- 下游接口是否超时。
- 数据库是否慢查询。
- 消息消费是否堆积。
CPU 高可能是自身计算,也可能是依赖异常导致重试、超时和线程堆积。
处理要有优先级
如果已经影响核心链路,可以先限流、摘流量、扩容或回滚,恢复服务优先。
恢复后再做根因分析:
- 是否缺少缓存。
- 是否存在低效循环。
- 是否日志过多。
- 是否线程池配置不合理。
- 是否下游异常触发重试风暴。
维护建议
CPU 过高排查文档要保留命令、监控面板、线程栈分析方法和复盘结论。
下次再遇到同类问题,就能从“先保留现场”开始,而不是直接猜。
正文完




