trace命令使用

trace 能方便的帮助你定位和发现因 RT 高而导致的性能问题缺陷,但每次只能跟踪一级方法的调用链路
注:以下命令按”q”退出

1,监控方法的请求链路以及耗时,次数=3,耗时>1毫秒:

1
trace cn.soilove.expro.webadmin.AdminLoginController login -n 3 "#cost>1"

2,将jdk函数执行过程也收集出来:

1
trace --skipJDKMethod false cn.soilove.expro.webadmin.AdminLoginController login -n 3 "#cost>1"

跟踪效果:

1
2
3
4
5
6
7
8
9
10
11
Affect(class count: 1 , method count: 1) cost in 344 ms, listenerId: 1
`---ts=2020-06-17 13:57:24;thread_name=http-nio-8080-exec-2;id=1c;is_daemon=true;priority=5;TCCL=org.springframework.boot.web.embedded.tomcat.TomcatEmbeddedWebappClassLoader@fe9da7
`---[109.157235ms] cn.soilove.expro.webadmin.AdminLoginController:login()
+---[0.048382ms] cn.soilove.expro.webadmin.vo.login.AdminLoginParam:getUserName() #39
+---[0.025775ms] org.apache.commons.lang3.StringUtils:isEmpty() #39
+---[0.024296ms] cn.soilove.expro.webadmin.vo.login.AdminLoginParam:getUserPwd() #40
+---[0.015797ms] org.apache.commons.lang3.StringUtils:isEmpty() #40
+---[0.013396ms] cn.soilove.expro.webadmin.vo.login.AdminLoginParam:getUserName() #44
+---[0.014851ms] cn.soilove.expro.webadmin.vo.login.AdminLoginParam:getUserPwd() #44
+---[108.179494ms] cn.soilove.expro.service.user.AdminUserService:login() #44
`---[0.046167ms] cn.soilove.expro.common.Response:success() #46

thread命令使用

thread是线程排查命令

1,一键展示当前最忙的前N个线程并打印堆栈

1
thread -n 3

2,有时候我们发现应用卡住了,通常是由于某个线程拿住了某个锁, 并且其他线程都在等待这把锁造成的。
为了排查这类问题,arthas提供了一键找出那个罪魁祸首的命令

1
thread -b