跳转到内容

事务

事务在记录设置中配置。编辑 VM 组或 VM 池时,向导中显示的第一个步骤就是事务设置。

如果嵌套的 VM 组没有定义事务,VM 会从定义了事务的最近祖先组获取配置。“所有 JVM”配置始终关联有事务定义, 在这种沿层级向上的查找中,它始终是会成功的最后一站。

当嵌套组覆盖事务设置时,它会覆盖所有设置,不会与父组的设置合并。如果想重用父组中的部分定义,可以用 “保存集合”按钮将它们保存到一个集合中,然后在嵌套组的配置中用“添加集合”按钮将其加入。

为事务选择方法的方式取决于事务类型,见下文。无论哪种类型,每个事务定义都有一个可选的命名方案和可选的 策略。当某个方法调用被拦截时,jvmguard 会遍历事务定义列表,并应用第一个匹配条目的命名和策略。如果匹配 条目设置了“丢弃”标志,该调用会被排除,不再进行进一步匹配。

事务的名称由一串命名元素组合而成。可用的命名元素列表取决于事务类型,并在每种类型的高级主题中介绍。

通常,一小组方法就对应着需要测量的重要操作,无论是在自己的代码中,还是在无法修改的库中。jvmguard 为这些 情况提供三种事务类型。除了基本用法之外,配置还有许多精细的方面,因此每种类型在高级主题中都有单独的章节。

声明式事务在代码中使用 jvmguard 提供的注解定义。虽然命名完全由这些注解指定,但它们的策略必须在 jvmguard UI 中配置。这是定义复杂事务最易维护的方式。如何将它们添加到项目中,请参阅 关于声明式事务的高级主题

对于映射调用事务,需要指定一个特定的注解类名。在进一步配置中,可以 决定该注解应应用于类还是方法,以及如何处理继承的类。当框架已经使用注解来指定入口点时,这种方式很有用。

如果无法修改需要监控的代码,匹配事务允许直接在 jvmguard UI 中指定与声明式事务相同的拦截方式。更多 信息请参阅匹配事务的详细说明。

定义事务时的一个重要考虑是应允许哪种嵌套事务。jvmguard 不会记录同名的直接嵌套事务。更严格的选项是阻止 以下嵌套事务:

  • 匹配此条目的:如果嵌套事务来自此事务定义,则不会创建任何嵌套事务。
  • 组名相同的:选择此选项时,必须为此事务定义配置一个组名。当多个事务定义是同一操作的不同入口点并且 互相调用时,这个选项很有用。
  • 事务类型相同的:如果只想看到入口点而不关心内部结构,适合使用此选项,因为它会阻止同类型事务形成 嵌套树。
  • 所有后续条目:如果由当前事务定义创建了事务,使用此选项可阻止任何类型的嵌套事务。

重入抑制只适用于会直接嵌套的事务。如果允许某个嵌套事务,下一层嵌套将使用该事务自己的重入抑制设置。

jvmguard 根据所有记录的事务构建调用树。调用树是一种累积的数据结构,捕获事务相互嵌套的所有不同序列。如果 事务 C 既在事务 A 内被调用,也在事务 B 内被调用,它将在调用树中出现两次,一次作为 A 的子节点,一次作为 B 的子节点。这些序列中的每一个都可能出现多次,从而增加调用树中相应路径上的调用次数。

每个事务的数字(总时间、调用次数和平均时间)都按所选时间段显示。如果该时间段没有被完整测量,jvmguard 会在视图顶部显示覆盖的百分比。例如,jvmguard 服务器刚启动时,当前的小时间隔要经过完整一小时后才会被完整 测量。同样,如果停止 jvmguard 服务器一段时间,历史记录中会出现空洞,两侧的间隔都是不完整的。

热点是调用树的倒置,其中每个事务的所有出现都被求和,并连同其回溯一起显示。回溯中的调用次数和执行 时间指的不是事务,而是热点沿此路径被调用的次数。

为了强调回溯这一点,所有不是单个顶层节点的热点都有一个名为“累积回溯”的子节点。搜索事务使用视图顶部的 筛选栏。

为了提供调用树和热点视图中所选间隔的时间上下文,底部会显示一条事务时间线,其中当前间隔被高亮。也可以用 这条时间线点击某个数据点来选择其他间隔。显示单个选定事务的时间线时,总事务时间线会被替换,点击遥测右上角 的关闭按钮 [x] 即可恢复。

如果事务定义生成了过多不同的事务名称,例如命名方案中包含了每次调用都不同的值,jvmguard 会限制事务名称的 最大数量,并向收件箱发送一条消息,说明如何解决这种情况。