Skip to content

链路耗时

方法调用页的 链路耗时 页签用于给当前这一次方法调用开启 Trace 采集。

它适合排查一个方法内部到底慢在哪里、是否进入了预期的 Service/Mapper、某条 SQL 是否耗时异常等问题。

WARNING

  • 开启后,DebugTools 会在目标 JVM 中对目标方法及其调用链做临时字节码增强,记录每个被追踪方法的执行耗时,并在调用结果中展示一棵追踪树。
  • 只想验证返回值时可以保持关闭。Trace 会在目标 JVM 中增强方法并记录调用树,开启范围越大,额外采集开销越高。
  • 第一次调用的时候因为要字节码增强所以时间可能会长导致统计不准,建议以第二次调用时间为准(不改配置第二次没有字节码转换了)

使用入口

在方法调用页打开 链路耗时 页签,勾选 追踪方法耗时 后配置本次调用的追踪范围。

链路耗时配置

配置项

配置说明
追踪方法耗时是否开启本次方法调用的 Trace。未勾选时,不会生成追踪结果。
最大深度从目标方法向下解析调用链的深度,默认值为 1。值越大,能看到的调用层级越深,同时需要增强的方法也越多。
MyBatis追踪 MyBatis Mapper 调用。开启后,Trace 树中会出现 Mapper 方法节点。
SQL把本次调用中执行的 SQL 加入 Trace 树。SQL 节点会展示最终 SQL 和执行耗时。
跳过get/set方法跳过 Java Bean 属性读写方法,减少 getXxxsetXxx 这类噪音节点。
业务包只追踪匹配该表达式的类。为空时不限制业务包。
忽略包排除匹配该表达式的类。为空时不排除。

最大深度

最大深度 用来控制追踪范围。默认 1 适合先观察目标方法和较近的下游调用;如果结果过少,再逐步调大。

不要一开始就设置得过大。目标方法内部如果调用链很长,较大的深度会导致更多类被增强,Trace 树也会更难阅读。

MyBatis 和 SQL

MyBatisSQL 是两个不同的开关:

  • MyBatis 记录 Mapper 方法调用,例如进入了哪个 Mapper、调用了哪个方法。
  • SQL 记录实际执行的 SQL 文本和 SQL 执行耗时。

如果只想看业务方法链路,可以不勾选它们。如果要分析数据库相关耗时,建议同时勾选 MyBatisSQL,这样可以从业务方法一路看到 Mapper 和具体 SQL。

TIP

SQL 节点依赖 DebugTools 的 SQL 拦截能力。目标应用需要已经以 DebugTools Agent 方式运行,才能在 Trace 中记录 SQL。

业务包和忽略包

业务包忽略包 使用 Java 正则表达式匹配类全名,并且按完整类名匹配。

常见写法:

text
com\.example\..*

如果只想追踪订单模块:

text
com\.example\.order\..*

如果想排除基础设施包:

text
com\.example\.common\..*

建议优先填写 业务包,把追踪范围限制在当前业务代码内;只有某些包噪音明显时,再补充 忽略包

WARNING

不要填写过宽的表达式,例如 .*。这会让 DebugTools 尝试追踪大量类,可能让调用变慢,也会让结果树非常庞大。

设置默认链路耗时参数

设置 -> 调用方法 -> 追踪方法耗时 中,可以配置方法调用面板唤醒时的默认链路耗时参数。

设置默认链路耗时参数

这组配置保存到插件的全局设置中,用来控制新打开方法调用面板时 链路耗时 页签的默认状态:

配置说明
启用追踪方法耗时默认是否勾选方法调用页中的 追踪方法耗时。开启后,新打开调用面板时会默认启用 Trace。
最大深度默认追踪深度。适合设置成较小值,例如 12,再在具体调用中按需调整。
MyBatis / SQL / 跳过get/set方法默认是否追踪 Mapper、SQL,以及是否过滤 get/set 方法。
业务包 / 忽略包默认包过滤表达式。建议在这里配置项目常用业务包,避免每次手动填写。

如果某个方法已经保存过请求参数,方法级缓存中的链路耗时配置会随该方法恢复;此时以方法级保存的配置为准。清理 Method param cache 后,再打开方法调用面板会重新使用这里的全局默认配置。

指定方法追踪

除了在方法调用页为本次调用开启 Trace,也可以在编辑器中把某个指定方法加入 Trace。

在 Java 方法内打开右键菜单,选择 追踪方法,可以执行:

指定方法追踪菜单

操作说明
添加方法到追踪将当前光标所在的方法加入目标应用的 Trace。插件会把类名、方法名和方法描述符发送给已附着的应用,目标 JVM 会对该方法做追踪增强。
从追踪中移除方法取消当前方法的 Trace。目标 JVM 会撤销该方法对应的追踪增强,本地也会移除该方法的追踪状态。

方法被加入 Trace 后,方法行头会显示 Trace 图标。点击这个图标可以直接取消该方法的 Trace,效果等同于在右键菜单中选择 从追踪中移除方法

Trace 行头图标

TIP

  • 如果当前只附着了一个应用,操作会直接发送到这个连接
  • 如果同时附着了多个应用,插件会弹出 选择附着应用,需要选择要生效的目标连接
  • 如果没有可用连接,需要先完成附着或连接。

查看追踪结果

调用完成后,如果本次请求开启了 追踪方法耗时,结果区域会出现 追踪 页签。

展示样式

切换到 追踪 页签时,DebugTools 会从目标应用加载 Trace 树。树节点包含三类:

节点说明
方法节点普通 Java 方法调用,展示类名、方法签名和耗时。
MyBatis 节点Mapper 方法调用,开启 MyBatis 后出现。
SQL 节点实际执行的 SQL,开启 SQL 后出现。

节点前面的耗时以毫秒展示。耗时超过 100ms 的节点会用红色显示,便于优先关注慢调用。

链路耗时追踪结果

结果树操作

  • 展开节点可以查看下级调用。
  • 在方法节点上打开右键菜单,可以跳转到对应方法源码。
  • 在 SQL 节点上打开右键菜单,或双击 SQL 节点,可以查看完整 SQL。

TIP

Trace 结果和普通返回值是分开加载的。只有切换到 追踪 页签时,插件才会去目标应用读取追踪树。

使用建议

  • 先用较小的 最大深度 调一次,确认慢点大致在哪个方向,再逐步扩大范围。
  • 优先用 业务包 限制范围,避免把框架、JDK 或三方库调用都纳入追踪。
  • 分析数据库问题时,同时开启 MyBatisSQL
  • 调试结束后,如果不再需要 Trace,关闭 追踪方法耗时 后再保存请求参数,避免下次打开同一方法时默认继续采集。