Arthas(Java诊断工具)


官方文档:https://arthas.aliyun.com/doc/quick-start.html#demo

一、快速开始

watch(方法执行数据观测)
watch 类全路径 方法名 returnObj        观察方法返回结果
watch demo.MathGame primeFactors "{params,returnObj}" -x 2 观察方法出参和返回值, -x 2为打印结果深度,默认为1;
watch demo.MathGame primeFactors "{params[0],target}" "params[0]<0" 观察第一个参数params[0]<0时的实例
watch demo.MathGame primeFactors '{params, returnObj}' '#cost>200'  观察耗时大于200ms的情况
watch demo.MathGame primeFactors 'target.illegalArgumentCount'      观察当前对象的某个属性,target是关键字,不能替换,target后边的是类中的属性值
watch demo.MathGame * '{params,@demo.MathGame@random.nextInt(100)}' -v -n 1 -x 2 获取类的静态字段、调用类的静态方法

其他参数还有:

-b      在方法执行前
-e      方法异常后
-s      方法返回后
-f      在方法结束之后(正常返回和异常返回)观察,默认开启
-v      打印更多信息

"{params,returnObj}"是观察表达式,可选的参数有:

loader         本次调用类所在的 ClassLoader
clazz          本次调用类的 Class 引用
method         本次调用方法反射引用
target         本次调用类的实例
params         本次调用参数列表,这是一个数组,如果方法是无参方法则为空数组
returnObj      本次调用返回的对象。当且仅当 isReturn==true 成立时候有效,表明方法调用是以正常返回的方式结束。如果当前方法无返回值 void,则值为 null
throwExp       本次调用抛出的异常。当且仅当 isThrow==true 成立时有效,表明方法调用是以抛出异常的方式结束。
isBefore       辅助判断标记,当前的通知节点有可能是在方法一开始就通知,此时 isBefore==true 成立,同时 isThrow==false 和 isReturn==false,因为在方法刚开始时,还无法确定方法调用将会如何结束。
isThrow        辅助判断标记,当前的方法调用以抛异常的形式结束。
isReturn       辅助判断标记,当前的方法调用以正常返回的形式结束。

 

二、命令参考

monitor         方法执行监控,数据统计用
watch           方法执行数据观测
trace           方法内部调用路径,并输出方法路径上的每个节点上耗时
stack           输出当前方法被调用的调用路径
tt              方法执行数据的时空隧道,记录下指定方法每次调用的入参和返回信息,并能对这些不同的时间下调用进行观测
help            查看所有命令
dashboard       展示当前进程的信息
thread 1        获取线程信息,1通常是main函数
jad 类全路径     反编译类

基础命令

help        查看命令帮助信息
cat         打印文件内容,和linux里的cat命令类似
echo        打印参数,和linux里的echo命令类似
grep        匹配查找,和linux里的grep命令类似
base64      base64编码转换,和linux里的base64命令类似
tee         复制标准输入到标准输出和指定的文件,和linux里的tee命令类似
pwd         返回当前的工作目录,和linux命令类似
cls         清空当前屏幕区域
session     查看当前会话的信息
reset       重置增强类,将被 Arthas 增强过的类全部还原,Arthas 服务端关闭时会重置所有增强过的类
version     输出当前目标 Java 进程所加载的 Arthas 版本号
history     打印命令历史
quit        退出当前 Arthas 客户端,其他 Arthas 客户端不受影响
stop        关闭 Arthas 服务端,所有 Arthas 客户端全部退出
keymap      Arthas快捷键列表及自定义快捷键
options     查看或设置Arthas全局开关

class/classloader相关

sc          查看JVM已加载的类信息,参数*则为所有,可以有前缀
sm          查看已加载类的方法信息
mc          内存编译器,内存编译.java文件为.class文件
retransform 加载外部的.class文件,retransform到JVM里
redefine    加载外部的.class文件,redefine到JVM里
dump        dump 已加载类的 byte code 到特定目录
classloader 查看classloader的继承树,urls,类加载信息,使用classloader去getResource

jvm相关

dashboard       当前系统的实时数据面板
thread          查看当前 JVM 的线程堆栈信息
jvm             查看当前 JVM 的信息
sysprop         查看和修改JVM的系统属性
sysenv          查看JVM的环境变量
vmoption        查看和修改JVM里诊断相关的option
perfcounter     查看当前 JVM 的Perf Counter信息
logger          查看和修改logger
getstatic       查看类的静态属性
ognl            执行ognl表达式
mbean           查看 Mbean 的信息
heapdump        dump java heap, 类似jmap命令的heap dump功能

 

posted @ 2021-02-05 17:40  覆手为云p  阅读(1073)  评论(0编辑  收藏  举报
停止精灵球