文章目录
一、问题现象
- 用户态CPU使用率(%CPU us)高居不下;
- 系统态CPU使用率(%CPU sy)高居不下;
二、问题原因
- 用户态CPU使用率高:无阻塞线程数多、无限循环、计算密集、GC频繁等;
- 系统态CPU使用率高:阻塞的线程数多、等待锁、等待IO,导致CPU上下文频繁切换;
三、排查手段
top -Hp <pid>
命令(可选用 htop 命令):查看CPU使用率最高的线程;jstack <pid> | grep -A 10 <tid_hex>
命令(可选用 show-busy-java-threads 工具):查看线程的状态,90%的问题都可以通过jstack
命令分析出原因;vmstat <interval>
命令:查看系统情况,可用于排查大量线程调用系统函数导致的CPU上下文切换频繁的问题;- asy