arthas使用指北
备忘录
一. arthas的使用
常用命令
-
jad
-
反编译class类、方法
-
语法
jad -c 类加载器 类的全路径 方法名
-
-
thread
-
操作线程
-
语法
`列举全部的线程` thread `按照CPU使用率列举前5个线程` thread -n 5 `根据id查看此线程处于的运行状态,在执行的具体某个方法,方法中的代码行号` thread id `根据关键字查找线程` thread|grep 关键字
-
-
ognl
-
灵活的表达式
-
语法
`输出内部类里面的静态变量` `-x 2 表示对象二级展开` ognl "@类名$内部类名@静态变量名" -x 2 `执行类中的静态方法,传递参数` ognl "@类名@静态方法(参数)" `查看集合(list/map)中的元素, index指list下标, 'key'指map中的key` ognl "@类名@静态变量[index]" ognl "@类名@静态变量['key']" `使用变量接收list、map、对象、方法的返回值。并输出` ognl "#value1={10,5,8},#value1" ognl "#value2=#{'key1':10, 'key2': 5},#value2" ognl "#value3 = new java.util.Random(10),#value3" ognl "#value4 = new java.util.Random().nextInt(100),#value4" `#this 永远表示当前的对象` ognl "{1,2}.size().(#this > 1 ? #this : 0)" `输出2,#this表示list的size`
-
-
sc、sm
-
查看JVM已经加载的类和方法
-
语法
`-d 表示输出详细` sc 类的全路径名 -d sm 类的全路径名 方法名 -d
-
-
dump
-
保存已加载字节码文件到本地
-
语法
`把demo包下所有的类的字节码文件保存到~/logs/arthas/classdump/目录下` dump demo.*
-
-
mc、redefine
-
mc
编译java
代码为.class
文件 -
redefine
加载外部.class
文件 -
语法
`编译MathGame文件` mc /root/MathGame.java -d /root `把编译后的MathGame文件加载到JVM` redefine /root/MathGame.class
-
-
monitor
-
用来监视一个时间段中指定方法的执行次数,成功次数,失败次数,耗时等这些信息
-
语法
`监视monitor方法,5s更新一次` monitor 类的全路径名 方法名 -c 5
监控项 说明 timestamp 时间戳 class Java类 method 方法(构造方法、普通方法) total 调用次数 success 成功次数 fail 失败次数 rt 平均耗时 fail-rate 失败率
-
-
watch
-
观察指定方法的调用情况
-
语法
参数名称 参数说明 class-pattern 类名表达式匹配 method-pattern 方法名表达式匹配 express 观察表达式 condition-express 条件表达式 [b] 在方法调用之前观察 before
[e] 在方法异常之后观察 exception
[s] 在方法返回之后观察 success
[f] 在方法结束之后(正常返回和异常返回)观察 finish
[E] 开启正则表达式匹配,默认为通配符匹配 [x:] 指定输出结果的属性遍历深度,默认为 1 `params表示入参,target表示类中的属性,retuernObj表示出参, 为固定格式,命名也是固定的。可选` `-x 2 表示展开2层` watch 类的全路径名 方法名 "{params,target,returnObj}" -x 2 -b -s
-
-
trace
-
对方法内部调用路径进行追踪,并输出方法路径上的每个节点上耗时。
-
语法
`追踪5次结束` `#cost > .5 表示时间大于0.5ms的记录, ognl表达式` `-E 开启正则匹配,默认是通配符匹配(不适用-E也可以使用 * 去匹配)` trace -E 类的全路径名1|类的全路径名2 方法名A|方法名B -n 5 '#cost > .5' `简易版` trace 类的全路径名 方法名
-
-
stack
-
输出当前方法被调用的调用路径
-
语法
`stack 类的全路径名 方法名 ognl表达式 -n 表示获取的次数, 支持-E使用正则匹配类名方法名` stack -E 类的全路径名1|类的全路径名2 方法名A|方法名B 'params[0]<0' -n 2 `简易版` stack 类的全路径名 方法名
-