JProfiler 架构
下图展示了涉及被分析 (profiled) 应用程序、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/jpexport
从先前保存的快照中提取数据并创建 HTML 报告。
bin/jpcompare
从运行中的 JVM 获取堆快照的一种低开销方法是使用 命令行工具。它使用 JVM 的内置功能保存一个 HPROF 快照,该快照可以由 JProfiler
打开,并且不需要加载分析代理。
bin/jpdump