arthas调试
官网
使用方法
使用方法
进入arthas
/home/Seeyon/A8/jdk/bin/java -jar arthas-boot.jar
找到协同进程
[1]: 56029 org.apache.catalina.startup.Bootstrap
如果只是退出当前的连接,可以用quit或者exit命令
如果想完全退出 arthas,可以执行stop命令。
跟踪类里面方法耗时,取样5次 再次跟踪耗时最长得跟踪取样
--skipJDKMethod false// 打印jdk相关
观察耗时/调用链路:
trace com.seeyon.apps.govdoc.controller.GovdocController summary -v -n 5 --skipJDKMethod false '1==1'
观察某个方法执行的入参出参
trace <类名> <方法名> params returnObj
反编译某个代码:
jad com.seeyon.XXX
查看静态类得属性
getstatic demo.MathGame random
!!!热部署!!!
redefine /data/Test.class 关闭Arthas服务器之前,会重置掉所有做过的增强类。但是用redefine重加载的类内容不会被重置。
# windos环境热部署方式:
redefine C:/Seeyon/A8/ApacheJetspeed/webapps/seeyon/WEB-INF/classes/com/seeyon/apps/ext/Pro_XDL_V80SP1/listener/DuigbxdEvent.class
# 还可以:
retransform 加载外部的.class文件(临时加载,用于观察日志,stop会清除增强类)
OGNL(用来执行方法,获取静态变量)
ognl '@java.lang.System@out.println("hello")'
ognl '@demo.MathGame@random
// 调用某个函数
ognl '@java.lang.System@out.println("hello ognl")'
// 获取静态字段
ognl --classLoaderClass org.springframework.boot.loader.LaunchedURLClassLoader @com.example.demo.arthas.user.UserController@logge
ognl --classLoaderClass org.springframework.boot.loader.LaunchedURLClassLoader -x 2 @com.example.demo.arthas.user.UserController@logger
刷新spring配置文件
查找 Bean 实例
ognl '@com.seeyon.bpmkuozhan1687936255787222559.extend.appservice.CustomMicroFlowAppServiceImpl@applicationContext.getBean("customMicroFlowAppServiceImpl")'
# 修改配置文件值=修改bean的属性值
ognl '@com.seeyon.bpmkuozhan1687936255787222559.extend.appservice.CustomMicroFlowAppServiceImpl@applicationContext.getBean("customMicroFlowAppServiceImpl").pushIp="新的值"'
# 方式2:刷新某个类的spring属性
ognl '@com.yourpackage.CustomMicroFlowAppServiceImpl@applicationContext.publishEvent(new org.springframework.cloud.context.refresh.ContextRefreshedEvent(@com.yourpackage.CustomMicroFlowAppServiceImpl@applicationContext))'
stack(输出当前方法被调用的调用路径)
//监控MathGame 的primeFactors方法调用路径
stack demo.MathGame primeFactors
// 条件表达式以及指定监测数量
stack demo.MathGame primeFactors 'params[0]<0' -n 2
tt(方法执行观测)
#记录下当前方法的每次调用环境现场
tt -t demo.MathGame primeFactors
# 方法重载? 多参数的犯法记录 指定参数
tt -t *Test print params.length==1
tt -t *Test print 'params[1] instanceof Integer'
tt -t *Test print params[0].mobile=="13989838402"
# 检索调用记录,检索的是上面tt记录下的记录
# 筛选出 primeFactors 方法的调用信息
tt -s 'method.name=="primeFactors"'
#查看调用信息 通过index编号 显示方法的详细信息
tt -i 1003
watch观察函数
#观察函数调用返回时的参数、this 对象和返回值
watch demo.MathGame primeFactors -x 2
#同时观察函数调用前和函数返回后
watch demo.MathGame primeFactors "{params,target,returnObj}" -x 2 -b -s -n 2