官方文档
https://arthas.aliyun.com/doc/
安装
略
入门
运行
选择 java 进程序号,回车
以下是基础命令
- 查看当前进程信息: dashboard
- 打印线程的栈:thread 线程 id
- 查找 main.class:thread 线程 id | grep ‘main(‘
- 查找 jvm 加载的类: sc -d *类名
- 反编译类:jad 类(sc -d *类名命令展示的 class-info)
- 查看函数的参数 / 返回值 / 异常信息:watch 类 primeFactors returnObj
- 退出: quit 或者 exit, 完全退出用 stop
进阶
- 查看函数返回值:watch 类 方法名 returnObj -x 2 ,-x 后面带的数字表示返回值的深度, 自己执行体验下就知道了
- 查看函数传参:watch 类 方法名 params[0] param[0] 中括号里 0,1 表示第几个参数
- 方法内部调用路径,并输出方法路径上的每个节点上耗时: trace 类 方法
实践
栗子 1:发现线上有 bug, 怀疑是代码没更新,或者传参有问题。
操作:
反编译代码,看看代码是不是最新的
jad com.study.demo.service.impl.DemoServiceImpl打印传参
watch com.study.demo.service.impl.DemoServiceImpl testArthas params
查看返回值
watch com.study.demo.service.impl.DemoServiceImpl testArthas returnObj -x 1
栗子 2:发现接口响应过慢
trace com.study.demo.controller.DemoController test
栗子 3: 发现调用外部接口这部分处理逻辑影响导致线上问题, 想打印传参以及返回值
watch com.study.demo.service.impl.DemoServiceImpl testArthas “{params,returnObj}” “#cost>200” -x 2
解释:查看传参跟返回值,以及方法耗时大于 200ms 的
https://tungchi.cn/2021/04/23/?p=71