站点图标 AI技术聚合

Arthas使用教程(8大分类)

文章目录

    • 一、简介
      • 1、简介
      • 2、项目所在位置
    • 二、安装Arthas
      • 1、安装Arthas
      • 2、卸载Arthas
      • 3、首次启动。
    • 三、核心监视功能
      • 1、`monitor`:监控方法的执行情况
      • 2、`watch`:检测函数返回值
      • 3、`trace`:根据路径追踪,并记录消耗时间
      • 4、`stack`:输出当前方法被调用的调用路径
      • 5、`tt`:时间隧道,记录多个请求
        • 5.1 `tt`对重载的支持
        • 5.2 `tt`发起重新请求
    • 四、项目中使用
      • 9.1 `trace`:查询最耗时应用
      • 9.2 `jad`:反编译耗时代码
      • 9.3 `trace`:查询最耗时应用
      • 9.4 `watch`:捕获耗时应用入参、返回值
    • 五、基础命令
      • 1、`help`:显示`Arthas`命令介绍
      • 2、`cat`:显示文件下,文本内容
      • 3、`grep`: 管道命令
      • 4、`pwd`:打印当前的工作目录
      • 5、`session`:查看当前会话的信息
      • 6、`reset`:重置增强后类
      • 7、`version`:查看当前`Arthas`版本
      • 8、`history`:查看历史命令
      • 9、`quit`:退出`Arthas`客户端
      • 10、`stop`:关闭 Arthas 服务端
      • 11、`keymap`:查看`Arthas`快捷键
    • 六、Jvm相关命令
      • 1、`dashboard`:实时数据面板
      • 2、`Thread`:线程相关堆栈信息
      • 3、`jvm`
      • 4、`sysprop`:查看/修改属性
      • 5、`sysenv`:查看JVM环境属性
      • 6、`vmpotion`:查看JVM中选项
      • 7、`getstatic`:获取静态成员变量
      • 8、`ognl`:执行ognl表达式
    • 七、类和类加载器(class/classLoader)
      • 1、`sc`:查看类信息
      • 2、`sm`:查看已加载方法信息
      • 3、编译与反编译`jad`、`mc`、`redefine`
        • 3.1 `jad`:反编译已加载类源码
        • 3.2 `mc`:编译Java代码
        • 3.3 `redefine`:加载外部`.class`文件
      • 4、`dump`:保存已加载字节码文件到本地
      • 5、`classloader`:获取类加载器的信息
    • 八、`option`全局选项
    • 九、`profiler`火焰图
    • 十、相关文件
      • 1、配套资料
      • 2、Xmind整理资料

一、简介

1、简介

GitHub地址

https://github.com/alibaba/arthas

码云地址

http://arthas.gitee.io/

ArthasAlibaba开源的Java诊断工具,深受开发者喜爱。
当你遇到以下类似问题而束手无策时, Arthas 可以帮助你解决:

  1. 这个类从哪个 jar 包加载的?为什么会报各种类相关的 Exception
  2. 我改的代码为什么没有执行到?难道是我没 commit?分支搞错了?
  3. 遇到问题无法在线上 debug,难道只能通过加日志再重新发布吗?
  4. 线上遇到某个用户的数据处理有问题,但线上同样无法 debug,线下无法重现!
  5. 是否有一个全局视角来查看系统的运行状况?
  6. 有什么办法可以监控到JVM的实时运行状态?
  7. 怎么快速定位应用的热点,生成火焰图?

Arthas 支持JDK 6+,支持Linux/Mac/Winodws,采用命令行交互模式,同时提供丰富的 Tab 自动补
全功能,进一步方便进行问题的定位和诊断。

2、项目所在位置

所在目录命令说明
dump将已加载类的字节码文件保存到特定的目录中
classloader获取类加载器的信息
monitor监控指定类中方法的执行情况
watch观察到指定方法的调用情况
trace对方法内部调用路径进行追踪,并输出方法路径上每个节点上耗时
stack输出当前方法被调用的路径
tt记录指定方法每次调用的入参和返回信息
options全局开关
profiler生成火焰图

二、安装Arthas

1、安装Arthas

  1. 下载arthas-boot.jar
wget https://arthas.aliyun.com/arthas-boot.jar;
java -jar arthas-boot.jar

选择进程

1

2、卸载Arthas

因为文件是绿色版本,直接删除安装目录既可

rm -rf ./arthas			#	隐藏目录
rm -rf logs/			#	日志目录

3、首次启动。

首先要启动jar包,然后才能启动Arthas。

三、核心监视功能

1、monitor:监控方法的执行情况

监控指定类中方法的执行情况
用来监视一个时间段中指定方法的执行次数,成功次数,失败次数,耗时等这些信息

参数说明

方法拥有一个命名参数 [c:],意思是统计周期(cycle of output),拥有一个整型的参数值

参数名称参数说明
class-pattern类名表达式匹配
method-pattern方法名表达式匹配
[E]开启正则表达式匹配,默认为通配符匹配
[c:]统计周期,默认值为120秒

监控demo.MathGame类,并且每5S更新一次状态。

monitor demo.MathGame primeFactors -c 5

监控的维度说明

监控项说明
timestamp时间戳
classJava类
method方法(构造方法、普通方法)
total调用次数
success成功次数
fail失败次数
rt平均耗时
fail-rate失败率

2、watch:检测函数返回值

方法执行数据观测,让你能方便的观察到指定方法的调用情况。

能观察到的范围为:返回值抛出异常入参,通过编写OGNL 表达式进行对应变量的查看。

参数说明:

watch 的参数比较多,主要是因为它能在 4 个不同的场景观察对象

参数名称参数说明
class-pattern类名表达式匹配
method-pattern方法名表达式匹配
express观察表达式
condition-express条件表达式
[b]方法调用之前观察before
[e]方法异常之后观察 exception
[s]方法返回之后观察 success
[f]方法结束之后(正常返回和异常返回)观察 finish
[E]开启正则表达式匹配,默认为通配符匹配
[x:]指定输出结果的属性遍历深度,默认为 1

这里重点要说明的是观察表达式,观察表达式的构成主要由ognl 表达式组成,所以你可以这样写"{params,returnObj}",只要是一个合法的 ognl 表达式,都能被正常支持。

特别说明

  • watch 命令定义了4个观察事件点,即 -b 方法调用前,-e 方法异常后,-s 方法返回后,-f 方法结束后
  • 4个观察事件点 -b-e-s 默认关闭,-f 默认打开,当指定观察点被打开后,在相应事件点会对观察表达式进行求值并输出
  • 这里要注意方法入参方法出参的区别,有可能在中间被修改导致前后不一致,除了 -b 事件点 params 代表方法入参外,其余事件都代表方法出参
  • 当使用 -b 时,由于观察事件点是在方法调用前,此时返回值或异常均不存在

通过watch命令可以查看函数的参数/返回值/异常信息。

案例:

#	查看方法执行的返回值
watch demo.MathGame primeFactors returnObj
#	观察demo.MathGame类中primeFactors方法出参和返回值,结果属性遍历深度为2。
#	params:表示所有参数数组(因为不确定是几个参数)。
#	returnObject:表示返回值
watch demo.MathGame primeFactors "{params,returnObj}" -x 2

查看执行前参数:

# -b 方法执行前的参数
watch demo.MathGame primeFactors "{params,returnObj}" -x 2 -b
#	查看方法中的属性
watch demo.MathGame primeFactors "{target}" -x 2 -b

查看某一属性的值

watch demo.MathGame primeFactors "{target.illegalArgumentCount}" -x 2 -b

检测方法在执行前-b、执行后-s的入参params、属性target和返回值returnObj

watch demo.MathGame primeFactors "{params,target,returnObj}" -x 2 -b -s -n 2

输入参数小于0的情况:

watch demo.MathGame primeFactors "{params[0],target}" "params[0]<0"

3、trace:根据路径追踪,并记录消耗时间

对方法内部调用路径进行追踪,并输出方法路径上的每个节点上耗时。

简介:

trace 命令能主动搜索 class-patternmethod-pattern 对应的方法调用路径,渲染和统计整个调用链路上的所有性能开销和追踪调用链路。

观察表达式的构成主要由ognl 表达式组成,所以你可以这样写"{params,returnObj}",只要是一个合法的 ognl 表达式,都能被正常支持。

很多时候我们只想看到某个方法的rt大于某个时间之后的trace结果,现在Arthas可以按照方法执行的耗时来进行过滤了,例如trace *StringUtils isBlank '#cost>100'表示当执行时间超过100ms的时候,才会输出trace的结果。

watch/stack/trace这个三个命令都支持#cost耗时条件过滤。

参数说明:

参数名称参数说明
class-pattern类名表达匹配
method-pattern方法名表达式匹配
condition-express条件表达式,使用OGNL表达式
[E]开启正则表达式匹配,默认是通配符匹配
[n:]设置命令执行次数
#cost方法执行耗时,单位是毫秒
参数名称参数说明
class-pattern类名表达式匹配
method-pattern方法名表达式匹配
condition-express条件表达式
#cost过滤条件,只追踪满足的耗时方法

案例:

#	trace函数指定类的指定方法
trace demo.MathGame run

文章出处登录后可见!

已经登录?立即刷新
退出移动版