一、问题现象二、问题原因三、排查手段四、诱因分析
4.1、[用户态CPU使用率高] GC频繁4.2、[用户态CPU使用率高] 计算密集4.3、[系统态CPU使用率高] 上下文切换频繁
一、问题现象- 用户态CPU使用率(%CPU us)高居不下;系统态CPU使用率(%CPU sy)高居不下;
- 用户态CPU使用率高:无阻塞线程数多、无限循环、计算密集、GC频繁等;系统态CPU使用率高:阻塞的线程数多、等待锁、等待IO,导致CPU上下文频繁切换;
- top -Hp
分析方法:jmap 堆内存转存后分析 GC 原因;
(1) top -Hp 分析方法: jstack 或 show-busy-java-threads 查看线程的状态和堆栈信息;[可选] 火焰图分析,查看 CPU、堆内存占用的分布情况;
(1) top -Hp (2) jstack (3) 可通过火焰图查看进程的CPU、堆内存的占用分布情况,推荐 async-profiler 工具,前提是手速要够快,否则CPU降下来了就不准,如下展示在用户态CPU使用率高的情况下捉取30秒的进程火焰图 堆内存的占用分布(sh profiler.sh -e alloc -d 30 -f /tmp/flamegraph_22100.html 22100) 分析方法: vmstat 命令看看系统情况,重点关注 system、cpu 类目jstack 或者 show-busy-java-threads 工具进一步分析
(1) top -Hp
(2) jstack
(3) jstat -gcutil
4.2、[用户态CPU使用率高] 计算密集
show-busy-java-threads 的结果一目了然
CPU的占用分布(sh profiler.sh -e cpu -d 30 -f /tmp/flamegraph_22100.html 22100)
4.3、[系统态CPU使用率高] 上下文切换频繁
(2) vmstat


![[问题记录] CPU 负载飚高 [问题记录] CPU 负载飚高](http://www.mshxw.com/aiimages/31/704310.png)
