Java服务CPU占用高问题定位方法
提供一种简单的方法来定位CPU高的问题。
- 找到CPU高的进程,比如232543;
- 执行top -H -p pid,找到占用CPU最高的线程号,比如232544,转换成16进制38c60;
- 执行jstack 232543 > 232543.log用来dump出目前代码栈;
- 从232543.log中根据线程号38c60查找其中的线程相应的代码栈,则可快速定位相应的业务代码;
2. 步骤
2.0 模拟CPU占用的例子
public class Cpu {public static void main(String[] args) throws InterruptedException {
int busyTime = 10;
int idleTime = busyTime;
while(true){
long startTime = System.currentTimeMillis();
//busy loop:
while((System.currentTimeMillis()-startTime)<=busyTime)
;
Thread.sleep(idleTime);
}
}
}
直接编译运行,CPU就会有大约50%的占用。
2.1 找到占用CPU高的进程
执行top命令,找到CPU高的进程232543
2.2 执行top -H -p pid,找到占用CPU最高的线程号232544,转换成16进制38c60
2.3 执行jstack 232543 > 232543.log用来dump出目前代码栈
2.4 从232543.log中根据线程号38c60查找其中的线程相应的代码栈,则可快速定位相应的业务代码
以上是 Java服务CPU占用高问题定位方法 的全部内容, 来源链接: utcz.com/z/392873.html