使用Arthas查看方法的参数信息情况
前言
最近在排查一个bug,需要看看一个接口方法的传参,但是方法里并没有打印传参,而且还是生产环境,更新包也麻烦,所以,准备安装一下Arthas,通过Arthas可以做到不更新后端代码的情况,直接监控接口的参数信息,Arthas提供了watch
命令和getstatic
命令可以来查看变量的值,下面看看怎么使用
什么是Arthas?
Arthas 是一款线上监控诊断平台,可以实时查看应用 load、内存、gc、线程的状态信息,可以在不修改代码的情况,定位问题,分析接口耗时、传参、异常等情况,提高线上问题排查效率
-
官网文档:https://arthas.aliyun.com/doc/
-
GitHub地址:https://github.com/alibaba/arthas
-
码云地址:http://arthas.gitee.io/
Arthas安装
Arthas安装教程,可以查看我之前博客:Java问题排查工具Arthas安装教程
getstatic命令
要获取全局静态变量的值,可以使用getstatic
命令
# 查看静态的变量websocketSet的值
getstatic com.example.YourClass websocketSet -x 2
watch命令
- 作用:监测方法的控制情况,入参、出参、异常等等情况
- 常用参数说明:
参数 | 说明 |
---|---|
-n | 监测多少次就退出 |
-x | 打印遍历深度 |
-b | 调用之前观察,监测比较耗时的长方法可以用, -b 函数调用前,-e 函数异常后,-s 函数返回后 |
- 示例
查看入参、回参、异常等等信息
watch com.example.YourClass yourMethod '{params,returnObj,throwExp,target}' -n 5 -x 3
条件表达式,对参数进行筛选
watch com.example.YourClass yourMethod "{params[0],target}" "params[0]<0" -n 2
查看调用异常信息
# -e表示抛出异常时才触发
watch com.example.YourClass yourMethod "{params[0],throwExp}" -e -x 2 -n 1
按照接口耗时进行筛选
# 接口耗时超过3ms才会打印
watch com.example.YourClass yourMethod '{params, returnObj}' '#cost>3' -x 2 -n 1
查看对象的属性值
# 单独查看对象的属性controlSeq
watch com.example.YourClass yourMethod '{params,target.controlSeq}' -x 2 -n 1
参考资料
https://arthas.aliyun.com/doc/
https://blog.csdn.net/weixin_44606481/article/details/135403038