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