Arthas之使用watch命令观察方法执行

1,523 阅读2分钟

命令说明:

方便观察知道函数的调用情况。能观察到的范围为:返回值、抛出异常、入参,通过编写ognl表达式进行对应变量的查看

参数说明:

示例: watch com.HelloArthasService hello '{params,returnObj,throwExp}' -f -x 3

参数名称参数说明示例
class-pattern类名表达式匹配com.HelloArthasService
method-pattern函数名表达式匹配hello
express观察表达式,默认值是{params, target, returnObj}{params,returnObj,throwExp}
condition-express条件表达式-f -x 3
[b]在函数调用之前观察
[e]在函数异常之后观察
[s]在函数返回之后观察
[f]在函数结束之后(正常返回和异常返回)观察
[E]开启正则表达式匹配,默认为通配符匹配
[x:]指定输出结果的属性遍历深度,默认为13,数字越大深度越深,深度过浅输出的结果为地址值,可根据实际返回深度进行设置

特别说明:

  • watch命令定义了4个观察点,即-b 函数调用之前,-e函数异常后,-s函数返回后,-f函数结束后
  • 4个观察点-b-e-s默认关闭,-f默认打开,当知道观察点被打开后,在相应事件点会对观察表达式进行求值并输出
  • 这里要注意函数入参函数出参的区别,有可能在中间被修改导致前后不一致,除了-b事件点params代表函数入参外,其余事件都代表函数出参
  • 当使用-b时,由于观察事件点是在函数调用之前,此时返回值或异常均不存在
  • 在watch命令的结果里,会打印出location信息。location有三种可能值:AtEnter(应函数入口),AtExit(函数正常return),AtExceptionExit(函数抛出异常)。

开发工具IntelliJ IDEA中使用插件生成命令

  1. 安装插件arthas idea
  2. 选中需要观测的函数右击鼠标找到Arthas Command,选择Arthas Command下的Watch

  1. 到服务器中启动arthas粘贴即可

注:更多参数可使用命令watch -h 查看

注意使用完Arthas一定要用stop命令退出否则arthas将一直占用线程,下一次启动之前需要先stop才能启动