【Arthas】重要技巧

当你遇到以下类似问题而束手无策时,Arthas可以帮助你解决:
这个类从哪个 jar 包加载的?为什么会报各种类相关的 Exception?

安装

curl -O https://arthas.aliyun.com/arthas-boot.jar
image.png

输入编号进入指定项目, 如13

反编译

jad com.xxxx.web.manager.boot.PartnerWebManagerApplication
image.png

查看方法入参,返回值

watch com.xxx.web.manager.controller.ad.config.AdConfigController list returnObj
image.png

查看返回值属性遍历深度

watch com.xxx.web.manager.controller.ad.config.AdConfigController list returnObj -x 3
image.png

同时观察入参和出参

watch com.xxx.web.manager.controller.ad.config.AdConfigController list {params,returnObj} -x 3
image.png
可以使用ongl条件表达式过滤指定的请求
 watch com.xxx.web.manager.controller.ad.config.AdConfigController list "{params[0],target}" "params[0]<0"
 获取第一个参数,并且条件满足后面的条件
 
 
  watch com.xxx.web.manager.controller.ad.config.AdConfigController list "{params[0],target}"
 '{params, returnObj}' '#cost>200'
 只查看耗时大于200ms的请求
image.png

观察表达式和条件表达式可以使用ognl表达式

查看方法调用路径及响应时间

 trace com.xxx.web.manager.controller.ad.config.AdConfigController list
image.png

方法被调用路径

stack com.xxx.service.basic.ad.config.service.impl.AdConfigServiceImpl pageList

记录下指定方法每次调用的入参和返回信息

tt -t com.xxx.service.basic.ad.config.service.impl.AdConfigServiceImpl pageList
image.png

查看保存的方法调用列表

tt -l

根据条件搜索
tt -s 'method.name=="pageList"'

查看某一次调用的信息

tt -i 1003 -x3
image.png

不重启服务器,动态修改代码(添加日志)

java的方法存在方法区内,方法区里面的数据是类加载时从class文件中提取出来的,所以我们可以直接修改class文件并替换,达到热更新的目的

修改代码,编译成class文件


image.png

将class 文件上传到服务器某个目录下面,然后执行 retransform命令


image.png

再次调用修改后的接口,就会打印出新加的日志
image.png

查看类是从那个jar包执行

使用sc -d 命令


image.png
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容