JProfiler帮助文档

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


在某些情况下,并不是一个方法的平均调用时间有问题,而是一个方法每隔一段时间就会出现错误行为。 在调用树中,所有的方法调用都是累积的,所以一个经常被调用的方法,如果每10000次调用会有一次所 花费的时间是预期的100倍,就不会在总时间中留下明显的痕迹。

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

异常值检测视图

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

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

可以帮助你对方法量化。默认情况下,该表的排序方式是,具有最高异常值系数的方法位于顶部。 如果记录了CPU数据,异常值检测视图中的数据才可用。

为了避免只被调用几次的方法和运行时间极短的方法产生过多的杂乱,可以在视图设置中为最大时间和调用次数设置较低的阈值。 默认情况下,只有最大时间超过10 ms且调用次数大于10的方法才会显示在异常值统计中。

配置异常方法记录

一旦你发现某个方法调用持续时间有异常,你可以在上下文菜单中把它添加为异常方法。 同样的上下文菜单操作也可以在调用树视图中使用。

当你注册一个方法进行异常方法记录时,少数最慢的调用将被单独保留在调用树中,其他调用将像往常一样被合并到一个方法节点中。 单独保留的调用数可以在分析设置中配置,默认设置为5。

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

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

调用树中的异常方法

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

拆分后的方法节点有修改过的图标,并显示额外的文字。

  • [异常运行]
    这样的节点包含了一个特别慢的方法运行,根据定义,它的调用次数为1。如果以后有许多其他方法运行速度更慢, 这个节点可能会消失,并被添加到"合并的异常运行"节点中,这取决于配置的单独记录的方法运行的最大数量。
  • [合并的异常运行]
    不符合异常慢的方法调用会被合并到这个节点。对于任何调用堆栈,每个异常方法只能有一个这样的节点。
  • [当前异常运行]
    如果调用树视图已经传输到JProfiler GUI,一个调用正在进行中,还不知道该调用是否异常缓慢。 "当前异常运行"为当前调用显示一个单独维护树。在调用完成后,它会作为一个单独的"异常运行"节点被维护, 或者被合并到"合并的异常运行"节点中。

就像通过探针拆分方法 进行调用树拆分一样,异常方法节点有一个合并拆分级别操作,让你可以在运行中合并或取消合并所有调用。