JProfiler帮助文档

Auto-Tuning 与忽略方法 (Ignored Methods)

如果方法调用 (method call) 记录类型设置为 instrumentation(插桩),所有被分析 (profiled) 类的方法都会被插桩。这会为执行时间极短的方法带来显著开销。如果此类方法的调用非常频繁,这些方法的测量时间将会过高。此外,由于插桩的原因,热点 (hot spot) 编译器可能无法对其进行优化。在极端情况下,尽管在未插桩运行时并非如此,此类方法也会成为主要的热点 (hot spot)。例如 XML 解析器中读取下一个字符的方法。此类方法返回非常快,但在短时间内可能会被调用数百万次。

当方法调用 (method call) 记录类型设置为 sampling(采样)时,不存在此问题。但是,采样不提供调用次数,仅显示耗时较长的方法调用 (method call),并且在使用采样时,若干视图 (view) 将无法具备其完整功能。

为了缓解插桩带来的问题,JProfiler 具备一种名为 Auto-Tuning 的机制。Profiling Agent 会不时检查具有较高插桩开销的方法,并将其传输给 JProfiler GUI。在状态栏中,将显示一个提示存在开销热点 (hot spot) 的条目。

您可以点击该状态栏条目来查看检测到的开销热点 (hot spot),并选择将它们添加到忽略方法列表中。随后,这些忽略的方法将不会被插桩。当会话 (session) 终止时,将显示相同的对话框。

在应用新的配置文件设置 (profiling setting) 后,所有忽略的方法都将从调用树 (call tree) 中消失。它们的执行时间将被计入调用方法的自耗时 (self-time)。如果稍后您发现某些忽略的方法在分析视图 (view) 中必不可少,可以在会话 (session) 设置中的 忽略的方法 (Ignored methods) 选项卡中将其移除。

忽略方法的默认配置包括用于动态方法调度的 Groovy 调用点 (call-site) 类,但这些类会导致难以追踪实际的调用链。

如果您想手动添加忽略的方法,可以在会话 (session) 设置中进行,但更简单的方法是在调用树 (call tree) 中选择一个方法,并从上下文菜单中调用 忽略方法 (Ignore method) 操作。

在过滤器设置中,您还可以通过将过滤器条目的类型设置为“Ignored”(忽略)来忽略整个类或包。从所选内容添加过滤器 (Add Filter From Selection) 菜单包含取决于所选节点的操作,并建议忽略该类或直至顶层包的各个包。取决于所选节点是紧凑分析 (compact-profiled) 还是被分析 (profiled),您还会看到用于将过滤器更改为相反类型的操作。

如果您不想看到有关 Auto-Tuning 的任何消息,可以在配置文件设置 (profiling setting) 中将其禁用。此外,您还可以配置判定开销热点 (hot spot) 的标准。如果同时满足以下两个条件,则该方法被视为开销热点 (hot spot):

  • 其所有调用的总时间超过了线程中整个总时间的千分比阈值
  • 其平均时间低于以微秒为单位的绝对阈值