文档
启动
wget https://alibaba.github.io/arthas/arthas-boot.jar
java -jar arthas-boot.jar
命令
dashboard
查看当前java进程的实时数据面板
dashboard
thread
查看当前线程信息
thread
classloader
类加载器信息
按类加载类型查看统计信息
classloader
查看ClassLoader统计信息和实例hash
classloader -l
查看ClassLoader的继承树
classloader -t
ognl
执行ognl表达式
执行静态方法
ognl '@java.lang.Math@abs(-1)'
获取静态变量
ognl '@java.lang.System@out'
指定ClassLoader执行静态方法
ognl默认使用SystemClassLoader,非默认加载器加载的Class无法读取,需要通过sc -d com.sz.Test
(推荐)或者classloader -l
命令获取加载该CLass的类加载器的hash后,指定hash执行静态方法
ognl -c 439f5b3d '@com.sz.Test@log.info("test")'
sc
查看JVM已加载的类信息
模糊搜索已加载的类
sc *service*
打印类的详细信息
sc -d com.sz.Test
jad
反编译指定已加载类的源码
反编译输出到文件
jad com.sz.Test > /opt/Test.java
monitor
方法执行监控
每5秒输出方法的访问次数
monitor -c 5 com.sz.Test test
watch
输出方法出参和返回值
watch com.sz.Test test "{params,returnObj}" -x 3
条件表达式过滤
watch com.sz.Test test "{params,returnObj}" "params[1]==5" -x 3
异常输出
watch com.sz.Test test "{params[0],throwExp}" -e -x 2
tt
方法执行数据的隧道
记录方法调用的环境现场
tt -t com.sz.Test test
输出
INDEX TIMESTAMP COST(ms) IS-RET IS-EXP OBJECT CLASS METHOD
---------------------------------------------------------------------------------------------------
1000 2019-04-05 15:49:28 17.526337 true false 0x6c03fb16 Test test
通过环境现场的index获取方法对象
tt -i 1000 -w 'target.log.info("hello world")'
Alibaba Arthas实践–获取到Spring Context,然后为所欲为