Alibaba Arthas学习与使用
目录
- 下载安装
- 卸载
- 退出
- 快捷键
- 重点部分: 命令
- dashboard
- thread
- jvm
- sysprop
- sysenv
- vmoption
- getstatic
- ognl
- sc
- sm
- jad
- mc
- redefine
- dump
- classloader
- monitor
- watch
- trace
- stack
- tt
- options
- profiler
下载安装
# 下载
curl -O https://alibaba.github.io/arthas/arthas-boot.jar
# 启动arthas
java -jar arthas-boot.jar
# 如果端口号被占用(arthas已经粘附一个进程),可以换另一个端口号执行
java -jar arthas-boot.jar --telnet-port 9998 --http-port -1
卸载
rm -rf ~/.arthas/
rm -rf ~/logs/arthas
退出
可以使用quit或exit命令,下次连接会自动连接上粘附的进程。stop退出结束连接。
快捷键
- keymap 显示Arthas对应的快捷键
重点部分: 命令
dashboard
显示当前系统实时数据面板,按q或ctrl+c退出
thread
查看当前jvm的线程堆栈信息
jvm
查看当前JVM的信息
sysprop
查看和修改jvm的系统属性
sysenv
查看当前jvm的环境属性
vmoption
查看,更新jvm诊断相关的参数
getstatic
通过getstatic命令可以方便的查看类的静态属性
getstatic 类名 属性名
ognl
执行ognl表达式,这是从3.0.5版本新增的功能
OGNl语法
https://commons.apache.org/proper/commons-ognl/language-guide.html
sc
查看jvm已加载的类信息,"Search Class"的缩写,这个命令可以搜索出所有已经加载到jvm中的class信息,sc默认开启了子类匹配功能,也就是说当前类的子类也会被搜索出来,想要精准匹配,需要打开 optionsdisable-sub-class true 的开关
sm
"Search Method"的缩写,搜索所有已经加载了class信息的方法信息。
sm命令只能看到由当前类声明的方法,父类无法看到
jad
反编译指定已加载类的源码
//反编译指定类
jad java.lang.String
//反编译指定类中的指定方法
jad java.lang.String trim
mc
在内存中把源代码编译成字节码
//编译
mc /root/Hello.java
//编译到指定目录
mc /root/Hello.java -d /tmp
redefine
把新生成的字节码文件在内存中执行,加载外部的.class文件,redefine到jvm里
注意:redefine后原来的类不可恢复,redefine有可能失败(比如增加了新的成员变量)
reset命令对redefine的类无效。如果想重置,需要redefine原始的字节码。
redefine命令和jad/watch/trace/monitor/tt等命令会冲突。执行完redefine之后,如果再执行上面提到的命令,则会把redefine的字节码重置。
redefine的限制
- 不允许新增加成员变量和方法,只允许在原有的上面修改
- 正在执行的函数,没有退出不能生效。
结合jad/mc命令使用
# 1.使用jad反编译demo.MathGame输出到/root/MathGame.java
jad --source-only demo.MathGame > /root/MathGame.java
# 2.按上面的代码编辑完,使用mc对内存中的新代码编译
mc /root/MathGame.java -d /root
# 3.使用redefine命令加载新的字节码
redefine /root/demo/MathGame.class
dump
将已加载类的字节码文件保存到特定目录: logs/arthas/classdump/
classloader
获取类加载器信息,classloader 命令将jvm中所有classloader的信息统计出来,并可以展示继承树,urls等。可以让指定的classloader去getResources,打印出所有查找到的resources的url。对于ResourceNotFoundException异常比较有用。
monitor
监控指定类中方法的执行情况
watch
观察指定方法的调用情况,能观察到的范围:返回值、抛出的异常、入参,通过OGNL表达式进行对应变量的查看
trace
对方法内部调用进行跟踪,并输出方法路径上每个节点上的耗时
stack
输出方法被调用的调用路径
tt
time-tunnel 时间隧道
记录下指定方法每次调用的入参和返回值,并能对这些不同时间下调用的信息进行观测。
options
arthas全局开关
profiler
生成火焰图,profiler命令支持生成应用热点火焰图。本质上是通过不断采样,然后把采集结果生成火焰图。命令基本运行结构是profiler命令 [命令参数]
启动profiler
# 默认情况下生成的是cpu的火焰图,即event为cpu。可以用--event参数来指定
profile start
# 停止采样,并生成火焰图
profile stop