arthas的一些使用技巧
arthas获取spring中的bean
现在大部分应用都是通过Spring来管理对象, 在使用arthas分析线上问题时, 如何获取Spring中已经注入到容器中的Bean, 主要是使用tt命令。
首先执行如下命令,等待输出
1 | tt -t org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter invokeHandlerMethod -n 3 |
假设要搜索的类名为com.example.DemoService
, 注意此处需要使用类的全限定名。
1 | tt -i 1000 -w 'target.getApplicationContext().getBean("com.example.DemoService").getTargetSource().target' |
arthas获取http请求的入参和出参
有时我们需要线上跟踪某个请求的入参和出参, 此时可以使用arthas的watch命令。
基于spring的工程,所有请求都会走RequestMappingHandlerAdapter的invokeHandlerMethod方法, 所以跟踪此方法。
有两点说明一下:
- 此处只打印了request,所以是params[0]
- 使用uri来过滤请求地址
当然能看到的信息还有很多, 具体可以参考watch命令。
1 | watch org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter invokeHandlerMethod 'params[0]' 'params[0].getRequestURI().contains("/ai/img")' -x 2 |
评论