Java进程CPU占用率高的分析方法

有时会碰到Java进程莫名CPU占用率高的问题,如何分析定位问题?如果能定位到当前正在执行的代码就好了。既然有思路了,那就找工具吧:

1、查询Java进程信息

使用JDK自带的进程状态工具jps

jps -v

执行得到以下结果:

结果第一列30731为PID,第二列Bootstrap为main class(如想显示全名,用jps -v -l),后面为JVM参数。

2、找出引起性能问题的线程PID

top -H -p PID

假设第1个线程就是我们要找的线程(真实情况可以按CPU占用来排序查找),那线程PID就是31213。

3、导出Java进程的线程栈信息

jstack PID > output.txt

导出的文件包含PID对应的所有线程的栈信息。

4、定位问题线程

由于jstack导出的文件中,线程ID(jstack中用nid表示)以16进制表示,但top命令找出来的线程PID又是10进制,要先进行转换。

echo "obase=16;PID" | bc

将得到的结果复制到上一步的output.txt查找,即可定位到对应的线程栈。接下来就是分析java代码了,略去。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值