arthas使用

90 阅读2分钟

前言

arthas是线上调试产品,可以通过该工具,查看业务的问题,比如入参、出参以及监控等问题

arthas使用

arthas下载

可以通过该地址下载arthas

https://arthas.aliyun.com/doc/

arthas使用

解压之后,文件夹下的东西为

image.png

arthas启动

直接通过该命令启动arthas

java -jar arthas-boot.jar

如果是容器的话,可以将该文件夹复制到容器里面启动,或者打包镜像的话,将文件一起打包到镜像中,

docker cp arthas文件夹路径 容器id:/home/arthas

arthas使用

启动之后,会输出java进程

image.png 想进入哪个进程,就输入对应的数字,然后回车就行,输出结果为

image.png

arthas命令行

dashboard

可以使用该命令查看实时数据面板

image.png

watch查看入参和出参
watch com.example.UserService getUser "{params, returnObj}" -x 2

在 Arthas 中,查看方法参数最常用的是 watch 命令。以下是几种核心用法:

1. 基础用法:查看入参和返回值

bash

编辑

1watch com.example.UserService getUser "{params, returnObj}" -x 2
  • params:方法入参数组
  • returnObj:返回值
  • -x 2关键参数,指定对象展开层级(默认1层,建议设为2-3以查看嵌套对象内容)

2. 只查看入参

bash

编辑

1watch com.example.UserService getUser "{params}" -x 3

3. 按条件过滤参数

bash

编辑

1# 仅当第一个参数等于指定值时输出
2watch com.example.UserService getUser "{params, returnObj}" "params[0]=='admin'" -x 2
3
4# 仅当参数数量大于2时输出
5watch com.example.UserService getUser "{params}" "params.length>2" -x 2

4. 同时查看入参、返回值、异常和调用者

bash

编辑

1watch com.example.UserService getUser "{params, returnObj, throwExp, target}" -x 2 -e -s
  • -e:仅在方法抛出异常后触发
  • -s:仅在方法成功返回后触发
  • target:当前对象实例(可访问成员变量)
  • throwExp:异常对象

5. 使用 tt 命令记录并回放参数

适合需要事后分析的场景:

bash

编辑

1# 记录方法调用
2tt -t com.example.UserService getUser
3
4# 查看所有记录
5tt -l
6
7# 查看某次调用的详细参数(INDEX为记录编号)
8tt -i 1000 -p

⚠️ 注意事项

表格

下载为表格

导出为图片

要点说明
类名匹配支持通配符,如 com.example.*Service get*
展开深度-x 过大可能导致输出过多或OOM,生产环境建议 ≤3
性能影响watch 有性能开销,排查完毕后及时 stop 或 reset
静态方法同样适用,target 为 null
重载方法可通过指定参数类型精确匹配:getUser(String, int)
输入
 watch org.luban.module.base.auth.controller.UserController getUsers "{params, returnObj}" -x 3

输出结果为

image.png

总结

arthas还有许多功能可以使用,可以方便线上调试