操作流程
- CPU飙升问题定位:
- 定位高CPU进程
- 进程内高CPU线程 top -Hp [PID]
- jstack [PID] grep -A 20 [十六进制TID]抓取线程栈/arthas工具attach进程后profiler生成火焰图
2.排查常见原因 - 代码逻辑问题:死循环、递归爆栈、频繁字符串拼接
- 资源竞争/锁等待
- GC频繁:观察JVM及内存使用 新生代Minor GC和老年代FullGC
- 系统资源问题:规格、亲和以及宿主机超分
原理深度
工作中,遇到过while true死循环;队列线程等待,频繁上下文切换导致的CPU空转;也遇到过业务冲击,频繁创建大对象,自适应模式下IHOP因为动态调整迟迟未触发标记周期造成JVM监控告警;更早之前也有CPU核数的负载不均以及宿主机超分的影响。
这里记录字符串拼接的主要原因是使用大模型解释频繁字符串拼接string导致CPU飙升的过程中,大模型提供问题1和问题2两种解释,个人误以为是在AB测试,因为个人更喜欢问题2深度拆解的风格,知其然并知其所以然,当然从工具论的角度,问题1更加快速,忽视技术细节,更多是从是什么的角度来讲解。