Arthas trace (方法内部调用路径,并输出方法路径上的每个节点上耗时)
@[toc]
二、命令列表
2.3 monitor/watch/trace/stack/tt 相关
2.3.3 trace (方法内部调用路径,并输出方法路径上的每个节点上耗时)
使用场景
:
trace
命令在 Arthas 中用于跟踪方法的执行过程,能够详细记录方法调用的时间、参数、返回值等信息。它的主要使用场景包括:
- 性能分析:帮助识别方法调用的耗时,找出性能瓶颈。
- 调试:追踪方法的执行路径,了解方法内部的逻辑流动。
- 问题定位:快速捕获异常信息,了解异常发生的上下文。
通过
trace
命令,开发者可以获得深入的执行信息,从而更有效地优化和调试应用程序。
提示
方法内部调用路径,并输出方法路径上的每个节点上耗时
watch/stack/trace 这个三个命令都支持
#cost
trace
命令能主动搜索 class-pattern
/method-pattern
对应的方法调用路径,渲染和统计整个调用链路上的所有性能开销和追踪调用链路。
参数说明
参数名称 | 参数说明 |
---|---|
class-pattern | 类名表达式匹配 |
method-pattern | 方法名表达式匹配 |
condition-express | 条件表达式 |
[E] | 开启正则表达式匹配,默认为通配符匹配 |
[n:] |
命令执行次数,默认值为 100。 |
#cost |
方法执行耗时 |
[m <arg>] |
指定 Class 最大匹配数量,默认值为 50。长格式为[maxMatch <arg>] 。 |
这里重点要说明的是条件表达式
,条件表达式
的构成主要由 ognl 表达式组成,所以你可以这样写"params[0]<0"
,只要是一个合法的 ognl 表达式,都能被正常支持。
很多时候我们只想看到某个方法的 rt 大于某个时间之后的 trace 结果,现在 Arthas 可以按照方法执行的耗时来进行过滤了,例如trace *StringUtils isBlank '#cost>100'
表示当执行时间超过 100ms 的时候,才会输出 trace 的结果。
注意事项
:
trace
能方便的帮助你定位和发现因 RT 高而导致的性能问题缺陷,但其每次只能跟踪一级方法的调用链路。- 3.3.0 版本后,可以使用动态 Trace 功能,不断增加新的匹配类
- 目前不支持
trace java.lang.Thread getName
,考虑到不是非常必要场景,且修复有一定难度,因此当前暂不修
举例1:查看方法整体耗时
基础语法
:trace 全路径类名 方法名
$ trace demo.MathGame run
Press Q or Ctrl+C to abort.
Affect(class-cnt:1 , method-cnt:1) cost in 28 ms.
`---ts=2019-12-04 00:45:08;thread_name=main;id=1;is_daemon=false;priority=5;TCCL=sun.misc.Launcher$AppClassLoader@3d4eac69 `---[0.617465ms] demo.MathGame:run()
`---[0.078946ms] demo.MathGame:primeFactors() #24 [throws Exception] `---ts=2019-12-04 00:45:09;thread_name=main;id=1;is_daemon=false;priority=5;TCCL=sun.misc.Launcher$AppClassLoader@3d4eac69
`---[1.276874ms] demo.MathGame:run() `---[0.03752ms] demo.MathGame:primeFactors() #24 [throws Exception]
提示
结果里的
#24
,表示在 run 函数里,在源文件的第24
行调用了primeFactors()
函数。
举例2:trace次数限制
如果方法调用的次数很多,那么可以用-n
参数指定捕捉结果的次数。比如下面的例子里,捕捉到一次调用就退出命令。
基础语法
:trace 全路径类名 方法名 -n 次数
$ trace demo.MathGame run -n 1
Press Q or Ctrl+C to abort.
Affect(class-cnt:1 , method-cnt:1) cost in 20 ms.
`---ts=2019-12-04 00:45:53;thread_name=main;id=1;is_daemon=false;priority=5;TCCL=sun.misc.Launcher$AppClassLoader@3d4eac69 `---[0.549379ms] demo.MathGame:run()
+---[0.059839ms] demo.MathGame:primeFactors() #24
`---[0.232887ms] demo.MathGame:print() #25
Command execution times exceed limit: 1, so command will exit. You can set it with -n option.
本人其他相关文章链接
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
- 随机文章
- 热门文章
- 热评文章
- 电机性能测试系统:全面解析与选择指南电机性能测试仪
- 探索心理变态:理解、识别与应对心理变态测试题100
- 揭秘人际关系的秘密:心理测试与实用策略人际关系心理测试题及答案
- 我的成长故事
- 霍格沃茨分院测试:探索你的魔法学院归属pottermore:官方分院测验
- 国内最大的MCP中文社区来了,4000多个服务等你体验
- 【Docker游戏】使用Docker部署vue-XiuXianGame文字修仙小游戏
- 鸿蒙动画与交互设计:ArkUI 3D变换与手势事件详解
- 性格测试 测你的性格像《小娘惹》中的谁