arthas简单介绍
java线上诊断工具,功能强大,可以查看包加载路径,线上跟踪参数的传递,单一接口的入参以及出参,实时观看数据报表,查看cpu,堆内存的使用情况,生成火焰图,热更新代码等,下载安装简单且可配合idea插件快速上手
官方文档:Arthas 用户文档 — Arthas 3.6.2 文档
下载以及安装
官方 Github 下载命令
curl -O https://alibaba.github.io/arthas/arthas-boot.jar
码云下载
curl -O https://arthas.gitee.io/arthas-boot.jar
下载压缩包
进入官方文档,点击下载安装部分,本人使用的就是这种方法将整个包下载下来,在本地使用cmd命令打开黑窗口,并输入:java -jar arthas-boot.jar命令启动
这是我提前写好的demo,本地启动该demo后,启动arthas就能找到对应程序
下载的arthas里都会有一个数字游戏的jar包,可以启动该包作为练习使用,通过进入官方文档还可以点击在线教程进行线上练习
demo启动后,启动arthas的界面如下
找到自己要进行调试的jar包,输入它的id后回车就可启动,退出arthas要使用stop命令,防止端口被占用
配合idea插件的简单使用
常用命令介绍
watch : 查看方法的入参以及出参
trace : 方法的耗时
thread: cpu使用情况
tt : 记录参数的时间隧道
dashboard : 数据面板
jad :反编译代码
插件:arthas idea
下载插件后,选中要调试的方法名或者类名就可以获得想要的arthas命令,例如以下命令
解决cpu高,死锁,内存溢出等问题
我写了个死循环,通过arthas的方式将其找出来
代码:
访问test3,使用thread命令 查看cpu使用情况,高达79
访问test4,使用thread命令 查看cpu使用情况
thread -all 会查所有线程的cpu, thread -n 代表线程使用率最高的第n个,
thread -b 代表发生死锁的线程,在里面也能找出我们程序中的类和方法
内存溢出代码
启动的时候,将堆内存设小一点 ,这里重新启动程序,以及arthas
先使用dashboard查看一下数据面板,堆内存使用情况,
接着去访问test6,程序终端报出了我们熟悉的内存溢出
再观察一下jvm堆的使用情况
如果内存使用率在不断上升,而且gc后也不下降,后面还发现gc越来越频繁,很可能就是内存泄漏了,这个时候我们可以直接用heapdump命令把内存快照dump出来
使用工具进行分析即可,我这里下载的是idea的分析工具
stop命令退出arthas会撤回所有方法的增强命令