CPU异常往往是业务逻辑问题(死循环)、频繁gc以及上下文切换过多。而最常见的往往是业务逻辑(或者框架逻辑)导致的,可以使用jstack来分析对应的堆栈情况,本文通过死循环方式重现CPU过高场景,并实例讲解CPU过高问题排查的方式。
1.环境- Centos7 1核2GB
- Java8
创建 cpu-over-test 项目,添加了一个MyMainClazz类。里面有一个可是要 java -jar 执行的Main方法
模拟代码如下
public class MyMainClazz { public static void main(String[] args) { System.out.println("run start ..."); while (true) { } } }3.启动模拟程序
cpu-over-test.jar上传到服务器
启动命令
nohup java -jar cpu-over-test-1.0.jar &
启动成功示例:
1 top
如下图:整体CPU高达96.3%
可看出PID为 14855 的java进程占用cpu最高,达到了92.3%
使用命令:top -p 进程pid -H
1 top -p 14855 -H
如下图:可看出PID为14856的线程占用cpu最高,达到了92.3%
使用命令:printf “%x n” 线程PID
printf "%x n" 148564.4查看具体出现问题的代码位置
使用命令:jstack 进程pid | grep 线程ID转换为16进制值 -C20
jstack 14855 | grep 3a08 -C20
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)