常用流程
搜索类
SC
1
2
3
4
5sc *.UserController
sc org.springframework.*
# 打印详细信息 -d:详情详细 -f:打印属性
sc -d -f com.test.UserController查看方法内部调用栈以及各节点上的耗时
trace
1
2
3
4trace com.test.UserController login
# 统计次数为1;包含JDK内的函数;耗时超过10ms
trace --skipJDKMethod false com.test.userController login -n 1 '#cost > 10'查看方法被调用路径
stack
1
2
3
4stack com.test.UserService login
# 根据条件过滤 统计1次
stack com.test.UserService login 'params[0]=="admin"' -n 1查看方法出入参
watch
1
2
3
4
5
6
7# 方法调用前后入参和返回值 -x:属性展开深度
watch demo.MathGame primeFactors "{params,returnObj}" -x 3 -b -f
# 根据耗时过滤
watch demo.MathGame primeFactors '{params, returnObj}' '#cost>200' -x 2
# 观察异常信息
watch demo.MathGame primeFactors "{params[0],throwExp}" -e -x 2保存、重播方法调用记录
tt
1
2
3
4
5
6
7
8
9
10
11
12
13tt -t demo.MathGame primeFactors
# 根据参数过滤
tt -t *Test print params[0].name=="admin"
# 查看记录
tt -l
# 查看详细调用信息
tt -i 1003
# 观察表达式
tt -w 'target.failCount' -x 1 -i 1003
# 请求重放
tt -i 1003 -p
spring应用下调用Bean方法
拦截请求
1
tt -t org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter invokeHandlerMethod
获取spring context
1
tt -i 1000 -w 'target.getApplicationContext()'
调用bean方法
1
tt -i 1000 -w 'target.getApplicationContext().getBean("helloWorldService").getHelloMessage()'
命令详细手册
Arthas的一些特殊用法 https://github.com/alibaba/arthas/issues/71