JProfiler帮助文档Download

异常值检测和异常方法记录


在某些情况下,问题不在于方法的平均调用时间,而在于方法偶尔会表现异常。在调用树中,所有方法调用都是累积的,因此一个每10000次调用中有一次耗时100倍于预期的频繁调用方法不会在总时间中留下明显的痕迹。

为了解决这个问题,JProfiler在调用树中提供了异常值检测视图和异常方法记录功能。

异常值检测视图

异常值检测视图显示了每个方法的调用持续时间和调用次数的信息,以及单次调用测得的最大时间。最大调用时间与平均时间的偏差显示了所有调用持续时间是否在一个狭窄的范围内,或者是否存在显著的异常值。异常值系数计算为

(最大时间 - 平均时间) / 平均时间

可以帮助您在这方面量化方法。默认情况下,表格按异常值系数从高到低排序。如果已记录CPU数据,则异常值检测视图中的数据可用。

为了避免来自仅调用几次的方法和运行时间极短的方法的过多混乱,可以在视图设置中设置最大时间和调用次数的下限。默认情况下,异常值统计中仅显示最大时间超过10毫秒且调用次数大于10的方法。

配置异常方法记录

一旦您确定了一个存在异常调用持续时间的问题方法,您可以在上下文菜单中将其添加为异常方法。同样的上下文菜单操作也可以在调用树视图中使用。

当您注册一个方法进行异常方法记录时,最慢的几个调用将单独保存在调用树中。其他调用将像往常一样合并到一个方法节点中。可以在配置文件设置中配置单独保留的调用次数。默认情况下,设置为5。

在区分慢方法调用时,必须使用某个线程状态进行时间测量。这不能是CPU视图中的线程状态选择,因为那只是一个显示选项,而不是记录选项。默认情况下,使用挂钟时间,但可以在配置文件设置中配置不同的线程状态。相同的线程状态也用于异常值检测视图。

在会话设置中,您可以在没有调用树或异常值检测视图上下文的情况下删除异常方法或添加新方法。此外,异常方法配置提供了为知名系统添加异常方法定义的选项,例如AWT和JavaFX事件调度机制,其中异常长时间运行的事件是一个主要问题。

调用树中的异常方法

异常方法运行在调用树视图中以不同方式显示。

拆分的方法节点具有修改后的图标并显示附加文本:

  •  [异常运行]
    这样的节点包含一个异常慢的方法运行。根据定义,它的调用次数为1。如果许多其他方法运行在以后变得更慢,这个节点可能会消失并根据配置的单独记录方法运行的最大数量被添加到“合并异常运行”节点。
  •  [合并异常运行]
    不符合异常慢标准的方法调用将合并到此节点中。对于任何调用栈,每个异常方法只能有一个这样的节点。
  •  [当前异常运行]
    如果在调用树视图传输到JProfiler GUI时调用正在进行中,尚不清楚调用是否异常慢。“当前异常运行”显示当前调用的单独维护的树。调用完成后,它将被维护为单独的“异常运行”节点或合并到“合并异常运行”节点。

与通过探针拆分方法进行的调用树拆分一样,异常方法节点在上下文菜单中有一个合并拆分级别操作,允许您动态合并和取消合并所有调用。