应用服务器 CPU 飙高(CPU 使用率突然或持续接近 100%)是生产环境中非常常见的问题,通常由计算密集、线程阻塞/自旋、外部依赖异常或配置不当引起。下面按「常见原因 → 典型表现 → 排查思路」系统说明。
1. 死循环 / 无限循环
while(true){
// 没有退出条件
}
2. 频繁 GC(垃圾回收)
表现:
top 中 CPU 高jstat -gcutil 中 GC 时间占比极高3. 正则 / 字符串处理 / 序列化
4. 线程自旋(Spin Wait)
while(!flag){} // 不睡、不释放 CPU
5. 线程数爆炸
6. 锁竞争严重
7. 下游慢导致线程堆积
结果:
8. 频繁的网络重试
9. 日志级别过低
DEBUG / TRACE 生产开启10. 容器 / JVM 参数问题
top
看:
%CPULoad Averagetop -Hp <pid>
记下高 CPU 的 线程 ID(十进制)
printf "%x\n" <tid>
jstack <pid> | grep <nid> -A 30
你通常能看到:
jstat -gcutil <pid> 1000
如果:
FGC 频繁GCT 很大| 场景 | 原因 |
|---|---|
| 请求量没变,CPU 突然高 | 慢 SQL / 缓存失效 |
| 重启后正常,几小时又高 | 内存泄漏 |
| 发布后开始高 | 新代码死循环 |
| K8s 中偶发高 | CPU limit 太小 |
✅ 线程池统一管控
✅ 超时 + 熔断 + 限流
✅ 生产关闭 DEBUG 日志
✅ 定期压测
✅ 监控:CPU / GC / 线程数 / RT
如果你愿意,可以告诉我:
top / jstack 片段我可以直接帮你定位具体是哪一类问题。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。