JProfiler帮助文档

快照

到目前为止,我们只查看了实时会话,其中 JProfiler GUI 从运行在被分析 JVM 内部的分析代理获取数据。JProfiler 还支持快照,即将所有分析数据写入文件。这在以下几种场景中非常有用:

  • 您自动记录分析数据,例如作为测试的一部分,因此无法通过 JProfiler GUI 进行连接。
  • 您希望比较不同分析会话中的分析数据,或查看较早的记录。
  • 您希望与他人共享分析数据。

快照包含所有记录的数据,包括堆快照。为节省磁盘空间,快照会被压缩,但堆 walker 数据除外,该数据必须保持未压缩状态以支持直接内存映射。

在 JProfiler GUI 中保存和打开快照

在分析实时会话时,您可以使用 Save Snapshot 工具栏按钮创建快照。JProfiler 会从远程代理拉取所有分析数据,并将其保存到扩展名为".jps"的本地文件中。您可以在实时会话过程中保存多个此类快照。这些快照不会自动打开,您可以继续进行分析。

保存的快照会自动添加到 File→Recent Snapshots 菜单中,因此您可以方便地打开刚刚保存的快照。在实时会话仍在运行时打开快照,您可以选择终止实时会话或打开另一个 JProfiler 窗口。

当您使用 JProfiler 中的快照比较功能时,快照列表将填充您为当前实时会话保存的所有快照。这使得比较不同用例变得非常方便。

通常,您可以通过从主菜单调用 Session→Open Snapshot,或在文件管理器中双击快照文件来打开快照。JProfiler 的 IDE 集成也支持通过 IDE 本身的通用 Open File 操作打开 JProfiler 快照。在这种情况下,您将获得跳转到 IDE 中源代码的导航功能,而不是使用内置的源代码查看器。

打开快照时,所有记录操作均被禁用,只有包含已记录数据的视图可用。要了解已记录了哪类数据,请将鼠标悬停在状态栏中的记录标签上。

分析短生命周期程序

对于实时会话,所有分析数据都驻留在被分析 JVM 的进程中。因此,当被分析 JVM 终止时,JProfiler 中的分析会话也会随之关闭。要在 JVM 退出后继续分析,您有两种选择,这两种选择都可以在会话启动对话框中激活。

  • 您可以阻止 JVM 实际退出,并在 JProfiler GUI 连接期间人为地保持其存活。当您从 IDE 分析测试用例并希望在 IDE 的测试控制台中查看状态和总耗时时,这可能并不理想。
  • 您可以要求 JProfiler 在 JVM 终止时保存快照并立即切换到该快照。该快照是临时的,除非您先使用 Save Snapshot 操作,否则关闭会话时将被丢弃。

使用触发器保存快照

自动化分析会话的最终结果始终是一个或一系列快照。在触发器中,您可以添加"保存快照"操作,将快照保存在被分析 JVM 运行的机器上。当触发器在实时会话期间运行时,快照也会保存在远程机器上,并且可能不包含已传输到 JProfiler GUI 的部分数据。

使用触发器保存快照有两种基本策略:

  • 对于测试用例,在"JVM startup"触发器中开始记录,并添加"JVM exit"触发器以在 JVM 终止时保存快照。
  • 对于"CPU load threshold"触发器等异常条件,或使用"Timer trigger"进行周期性分析时,在记录一些数据后通过中间插入"Sleep"操作来保存快照。

HPROF 堆快照

在获取堆快照产生过多开销或消耗过多内存的情况下,您可以使用 JVM 作为内置功能提供的 HPROF 堆快照。由于此操作不需要分析代理,因此对于分析在生产环境中运行的 JVM 的内存问题非常有用。

使用 JProfiler,有三种方式获取此类快照:

  • 对于实时会话,JProfiler GUI 在主菜单中提供了一个操作,用于触发 HPROF 堆转储。
  • JProfiler 有一个特殊的"Out of memory exception"触发器,用于在抛出 OutOfMemoryError 时保存 HPROF 快照。这对应于 HotSpot JVM 支持的 VM 参数
    -XX:+HeapDumpOnOutOfMemoryError
  • JDK 中的 jmap 可执行文件可用于从正在运行的 JVM 中提取 HPROF 堆转储。

    JProfiler 包含命令行工具 jpdump,它比 jmap 更加灵活。它允许您选择进程,可以连接到在 Windows 上作为服务运行的进程,不存在混合 32 位/64 位 JVM 的问题,并且能自动为 HPROF 快照文件编号。使用 -help 选项执行以获取更多信息。

JDK Flight Recorder 快照

JProfiler 完全支持打开由 Java Flight Recorder(JFR)保存的快照。在这种情况下,UI 会有明显差异,并根据 JFR 的功能进行调整。有关更多详细信息,请参阅 JFR 帮助主题

使用 AI 代理进行快照分析

JProfiler 的 MCP server 可以加载 JProfiler 快照(.jps)、HPROF 文件(.hprof)、PHD 文件(.phd)和 JFR 记录(.jfr),供 AI(人工智能)代理进行分析。这对于复杂的分析场景非常有用,您可以使用 JProfiler GUI 记录快照,然后让 AI(人工智能)代理分析数据。可以同时加载两个相同类型的快照进行基线比较。