JProfiler帮助文档Download

JProfiler 架构


下图展示了涉及被分析 (profiled) 应用程序、JProfiler UI 和所有命令行实用程序的重要交互的全貌。

远程或本地本地被分析的JVM JProfilerMBeanjpcontroller发布通过SOCKET连接通过JMX连接使用 -agentpath加载控件与离线分析jpenablejpdump命令行参数jpexportjpcomparejpanalyze传输数据执行HPROF堆转储通过ATTACH加载JProfiler代理Snapshots加载分析代理分析数据控制记录命令行工具进程组件数据JProfiler UI

分析代理

"JVM 工具接口" (JVMTI) 是一个本机接口,分析器使用它来访问信息并添加钩子以插入自己的检测工具。这意味着至少部分分析代理必须实现为本机代码,因此 JVM 分析器不是平台独立的。JProfiler 支持一系列平台,列表在此处

JVM 分析器实现为一个本机库,该库在启动时或稍后某个时间点加载。要在启动时加载它,需要在命令行中添加 VM 参数 -agentpath:<本机库路径>。您很少需要手动添加此参数,因为 JProfiler 会为您添加,例如,在 IDE 集成、集成向导中或直接启动 JVM 时。然而,了解这就是启用分析的关键是很重要的。

如果 JVM 成功加载了本机库,它会调用库中的一个特殊函数,让分析代理有机会初始化自己。然后 JProfiler 会打印一些以 JProfiler> 为前缀的诊断消息,以便您知道分析已激活。底线是,如果您传递了 -agentpath VM 参数,分析代理要么成功加载,要么 JVM 无法启动。

一旦加载,分析代理请求 JVMTI 通知各种事件,例如线程创建或类加载。这些事件中的一些直接提供分析数据。使用类加载事件,分析代理在类加载时检测类并插入自己的字节码以执行其测量。

JProfiler 可以将代理加载到已经运行的 JVM 中,方法是使用 JProfiler UI 或 bin/jpenable 命令行工具。在这种情况下,可能需要重新转换大量已经加载的类以应用所需的检测工具。

记录数据

JProfiler 代理仅收集分析数据。JProfiler UI 是单独启动的,并通过 SOCKET 连接到分析代理。对于远程服务器的安全连接,您可以配置 JProfiler 自动创建 SSH 隧道。

从 JProfiler UI,您可以指示代理记录数据,在 UI 中显示分析数据并将快照保存到磁盘。作为 UI 的替代方案,分析代理可以通过其 MBean 控制。使用此 MBean 的命令行工具是 bin/jpcontroller

控制分析代理的另一种方法是使用预定义的触发器集和动作。这样,分析代理可以在无人值守模式下运行。这在 JProfiler 中称为 "离线分析",对于自动化分析会话非常有用。

快照

虽然 JProfiler UI 可以显示实时分析数据,但通常需要保存所有记录的分析数据的快照。快照可以在 JProfiler UI 中手动保存,也可以通过触发器动作自动保存。

快照可以在 JProfiler UI 中打开和比较。对于自动化处理,可以使用命令行工具 bin/jpexportbin/jpcompare 从先前保存的快照中提取数据并创建 HTML 报告。

从运行中的 JVM 获取堆快照的一种低开销方法是使用 bin/jpdump 命令行工具。它使用 JVM 的内置功能保存一个 HPROF 快照,该快照可以由 JProfiler 打开,并且不需要加载分析代理。