JVM进程CPU占用率过高问题排查

定位故障的思路

找出CPU占用率高的进程
找出问题进程内CPU占用率高的线程
通过线程栈信息找出该线程当时在运行的问题代码段

操作步骤

使用JDK自带的命令

1. 用top命令查找导致CPU占用率高的进程

2. 用top命令查找进程内导致CPU占用率高的线程  top -Hbp 进程号

例如 top -Hbp 15387

3.用JVM命令 jstack 精确定位出问题的代码段

3.1 用jstack 命令dump出线程栈信息,可以直接定位到出问题的代码段。这里也分两步。第一步把上面的线程ID 15531 转化为十六进制(因为jstack输出的线程栈信息中,线程ID是以十六进制展示的):

$ printf "%x\n" 15531
3cab

第二步使用命令 jstack $pid | grep “线程id” 把信息打印出来:

$ jstack 15387 | grep 3cab

也可以使用阿里开源的Arthas工具进行的

首先,下载Arthas命令

curl -L http://start.alibaba-inc.com/install.sh | sh

启动

./as.sh

使用Arthas命令"thread -n 3 -i 1000"查看当前"最忙"(耗CPU)的三个线程

 

通过上面的堆栈信息,可以看出,占用CPU资源的线程主要是卡在哪里

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值