简介
官方文档链接:https://arthas.aliyun.com/doc/quick-start.html
启动arthas
方式一:java -jar arthas-boot
方式二:java -jar arthas-boot pid
两种方式都可以,方式二要预先知道JAVA进程的PID
命令列表
控制面板
适用场景
场景一:查看当前jvm的线程执行状态,也可以使用thread命令
场景二:查看jvm的内存使用
示例
1dashboard
image.png
查看class源码
适用场景
场景一:测试/生产环境已经发布,方法执行与预期不符,无法确认类文件是否发布成功
场景二:测试/生产环境代码执行报错,暂时无法通过IDE工具查看源码
示例
# eg. com.demo.MainClass
jad --``source``-only com.demo.MainClass
|
监听方法执行
适用场景
场景一:代码执行异常,暂无法通过本地IDE工具进行DEBUG,通过日志又无法定位问题
场景二:查看方法的参数、返回结果
场景三:统计方法的执行耗时
示例
准备监听方法
# eg. com.demo.MainClass.doAnyThing()
tt -t com.demo.MainClass doAnyThing
# 监听通用方法可以加参数以防止方法数量过多
tt -t com.demo.MainClass doAnyThing params[0].customerId==3
查看监听列表
查看监听的方法列表
# 查看监听的方法列表
tt -l
# 监听的方法太多,只查看入参customerId=3的方法
tt -s params[0].customerId==3
查看监听方法的明细
# 通过index来查看监听方法的详细信息
tt -i 1000
# 只想查看入参中的某个对象,不想全量查看,可以加-w参数
tt -i 1000 -w params[0].userVO
tt -i 1000 -w returnObj.response
热更新class文件
适用场景
生产环境无法随时重启部署,通过retransform对运行的jvm中的class文件进行替换,以达到不发布即可更新代码的目的
示例
# 指定绝对的class路径加载到jvm内存中
retransform ``/tmp/com/example/demo/arthas/user/UserController``.class
生产环境的服务器一般是多台,手动执行风险极高,而且属于奇技淫巧,不推荐当作正常发布的流程
生成JVM火焰图
适用场景
希望观察jvm在一定时间内的cpu负荷
示例
# 单位:秒,执行300秒后结动结束,默认采集cpu,默认生成svg格式
profiler start --duration 300
image.png












网友评论