JProfiler帮助文档

遥测 (telemetry)

分析 (profiling) 的一个方面是随时间监控标量测量值,例如已用堆大小。 在 JProfiler 中,这类图形被称为遥测 (telemetry)。观察遥测 (telemetry) 可以帮助你更好地理解被分析 (profiled) 的软件, 让你能够在不同测量项之间关联重要事件,并在发现异常行为时,促使你在 JProfiler 的其他视图 (view) 中进行更深入的分析。

标准遥测 (telemetry)

在 JProfiler UI 的“遥测 (telemetry)”部分,默认会记录多个遥测 (telemetry)。 对于交互式会话 (session),它们始终处于启用状态。部分遥测 (telemetry) 需要记录特定类型的数据。 在这种情况下,遥测 (telemetry) 中会显示一个记录操作。

若要在同一时间轴上比较多个遥测 (telemetry),概览会以可配置的行高将多个小型遥测 (telemetry) 叠加显示。 点击遥测 (telemetry) 标题可激活完整的遥测 (telemetry) 视图 (view)。 概览中遥测 (telemetry) 的默认顺序可能并不适合你的需求,例如你希望将选定的遥测 (telemetry) 并排对比。 此时,你可以在概览中通过拖放重新排序它们。

完整视图 (view) 会显示带有当前值的图例,并可能包含比概览中更多的选项。 例如,“内存”遥测 (telemetry) 允许你选择单独的内存池。

JProfiler 提供了大量的 探针 (probe),用于记录 JVM 中高层系统和重要框架的事件。 探针 (probe) 拥有各自的遥测 (telemetry),并在对应的探针视图 (probe view) 中显示。 若要将这些遥测 (telemetry) 与系统遥测 (telemetry) 进行对比,你可以将选定的探针遥测 (probe telemetry) 添加到顶层遥测 (telemetry) 部分。 在工具栏中,选择 添加遥测 (Add telemetries)→探针遥测 (Probe Telemetry) 并选择一个或多个探针遥测 (probe telemetry)。

每个添加的探针遥测 (probe telemetry) 都会在遥测 (telemetry) 部分拥有自己的视图 (view),并在概览中显示。

一旦添加了探针遥测 (probe telemetry),只有在已记录探针 (probe) 数据时才会显示数据。 否则,遥测 (telemetry) 描述中会包含一个内联按钮用于开始记录。

探针遥测 (probe telemetry) 的右键菜单中包含记录操作以及显示对应探针视图 (probe view) 的操作。

类似于探针视图 (probe view),记录对象的 VM 遥测 (telemetry) 依赖于内存记录,并同样提供记录按钮和类似的右键菜单。

最后,还有“跟踪 (tracking)”遥测 (telemetry),用于监控在其他视图 (view) 中选定的标量值。 例如,类追踪器 (class tracker) 视图 (view) 允许你选择一个类并随时间监控其实例数量。 此外,每个探针 (probe) 都有一个“追踪器 (Tracker)”视图 (view),用于监控选定的热点 (hot spot) 或控制对象 (control object)。

书签 (bookmark)

JProfiler 会维护一个在所有遥测 (telemetry) 中显示的书签 (bookmark) 列表。 在交互式会话 (session) 中,你可以通过点击工具栏按钮 添加书签 (Add Bookmark), 或在右键菜单中使用 在此添加书签 (Add Bookmark Here) 功能,在当前时间点添加书签 (bookmark)。

书签 (bookmark) 不仅可以手动创建,还会在记录操作时自动添加,以标记特定记录的开始和结束。 通过触发器 (trigger) 操作或控制器 API,你也可以以编程方式添加书签 (bookmark)。

书签 (bookmark) 具有颜色、线型以及在工具提示中显示的名称。你可以编辑已有书签 (bookmark) 并修改这些属性。

如果在遥测 (telemetry) 中右键点击多个书签 (bookmark) 过于繁琐,你可以通过菜单中的 分析 (Profiling)→编辑书签 (Edit Bookmarks) 操作获取书签 (bookmark) 列表。 在这里你还可以将书签 (bookmark) 导出为 HTML 或 CSV。

自定义遥测 (telemetry)

有两种方式可以添加你自己的遥测 (telemetry): 一是在 JProfiler UI 中编写脚本以提供数值,二是选择一个数值型 MBean 属性。

若要添加自定义遥测 (telemetry),点击“遥测 (telemetry)”部分可见的工具栏按钮 配置遥测 (Configure Telemetries)。 在脚本遥测 (script telemetry) 中,你可以访问当前 JProfiler 会话 (session) 类路径 (classpath) 中配置的所有类。 如果某个值无法直接获取,可以在你的应用中添加一个静态方法,并在脚本中调用。

上述示例展示了对平台 MBean 的调用。对 MBean 标量值进行图形化更方便的方式是使用 MBean 遥测 (telemetry)。 此时,MBean 浏览器允许你选择合适的属性。属性值必须为数值型。

你可以将多个遥测 (telemetry) 线合并为一个遥测 (telemetry)。因此,配置分为两部分:遥测 (telemetry) 本身和遥测线。 在遥测线中,你只需编辑数据源和线条标题;在遥测 (telemetry) 中,你可以配置单位、缩放和堆叠,这些设置适用于所有包含的线条。

在堆叠遥测 (stacked telemetry) 中,单独的遥测线是累加的,并可显示面积图。 缩放因子用于将值转换为支持的单位。例如,如果数据源报告的是 kB,问题在于 JProfiler 没有匹配的“kB”单位。 如果你将缩放因子设置为 -3,值会被转换为字节 (bytes),并通过选择“字节 (bytes)”作为遥测 (telemetry) 的单位,JProfiler 会自动在遥测 (telemetry) 中显示合适的聚合单位。

自定义遥测 (telemetry) 会按配置顺序添加到“遥测 (telemetry)”部分的末尾。 若要重新排序,可在概览中将其拖动到期望位置。

开销 (overhead) 考虑

乍一看,遥测 (telemetry) 似乎会随着时间线性消耗内存。 但实际上,JProfiler 会合并较早的数值,并逐步降低其精度,以限制每个遥测 (telemetry) 消耗的总内存量。

遥测 (telemetry) 的 CPU 开销受限于其值每秒仅轮询一次。 对于标准遥测 (telemetry),此数据收集不会带来额外开销。 对于自定义遥测 (telemetry),开销取决于底层脚本或 MBean。