干货第一弹-教你如何利用阿里开源工具进行排查线上CPU居高问题

本文介绍了如何使用阿里开源工具Arthas来排查线上Java应用的CPU使用率高问题。通过jstack、jstat等命令分析堆栈和GC情况,然后详细展示了Arthas的使用,包括监控、线程查看、jad反编译等功能,快速定位到问题代码。此外,还提到了show-busy-java-threads.sh脚本作为辅助排查工具。
摘要由CSDN通过智能技术生成

实例:printf ‘%x\n’ 406 405 375 376,得到结果196、195、177、178;如下图所示:

查看堆栈,定位线程

命令:jstack 【进程PID】| grep 【线程转换后十六进制】-A10 , 使用jstack获取进程PID堆栈,利用grep定位线程id,打印后续10行信息。

实例:jstack 373 | grep ‘0x196’ -A10,如下图所示:

我们通过查看堆栈信息,发现了问题是TestWhile.whileTrue引起的

而且发现有2个GC线程,看上图中的“GC task thread#0 (ParallelGC)”,代表垃圾回收线程,该线程会负责进行垃圾回收

存储堆栈,批量查看

查看堆栈信息,我们也可以换个方法查看,可以先将jstack堆栈信息存储起来。

命令:jstack 【进程PID】> 【文件】

实例:jstack 373 > demo.dump,存储373进程的堆栈信息。

再使用cat + grep查找看看后面几个高CPU线程的堆栈信息。

实例:cat -n demo.dump | grep -A10 ‘0x196’,如下图所示:

可以看到线程0x196【线程196】产生堆栈信息,直指方法whileTrue。

GC查看

我们看到上图中有4个线程中的2个线程没有看到java代码,而是GC task thread#0 (ParallelGC),这个是GC垃圾回收的线程,是不是死循环导致了GC太频繁,导致CPU使用率居高不下呢?

我们使用jstat看下jvm的GC信息看看。

命令&#x

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值