JProfiler帮助文档

快照


到目前为止,我们只研究了JProfiler GUI从正在被分析的JVM内部运行的分析代理获取数据的实时会话情形。 JProfiler还支持快照,所有分析数据都被写入了快照文件。这种方式在如下几种情景有优势:

  • 你以自动化方式记录分析数据,例如作为测试的一部分,这样情况就不可能与JProfiler GUI连接。
  • 你想比较来自不同分析会话的分析数据或查看旧的记录。
  • 你想与他人共享分析数据。

快照包含所有记录的数据,包括堆快照。为了节省磁盘空间,快照经过压缩,除了为允许直接内存映射必须保持未压缩的堆遍历器数据。

在JProfiler GUI中保存和打开快照。

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

保存的快照会自动添加到 文件→最近的快照菜单,所以你可以方便地打开刚刚保存的快照。 当实时会话仍在运行时打开一个快照,你可以选择终止实时会话或打开另一个JProfiler窗口。

当你使用JProfiler中的快照比较功能时,快照列表由你为当前实时会话保存的所有快照构成。这使得它很容易比较不同的用例。

通常,你可以通过调用主菜单中的会话→打开快照或在文件管理器中双击快照文件打开快照。 JProfiler的IDE集成也支持通过IDE他们自己一般的打开文件操作打开JProfiler快照。 在这种情况下,你将使用IDE的源代码导航,而不是内置的源代码查看器。

当你打开快照时,所有的记录操作都被禁用,只有带有记录数据的视图可用。要查看记录了哪些类型的数据,请将鼠标悬停在状态栏中的记录标签上。

分析短寿命程序

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

  • 你可以防止JVM实际退出,只要JProfiler GUI被连接,就可以人为地保持它存活。 当你从IDE中分析一个测试用例,并希望在IDE的测试控制台中看到状态和总时间时,这种方式可能是不可取的。
  • 你可以要求JProfiler在JVM终止时保存一个快照,并立即切换到该快照。 该快照是临时的,将在你关闭会话时被丢弃,除非你首先使用了保存快照操作。

使用触发器保存快照

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

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

  • 对于测试用例,在"JVM启动"触发器中开始记录,并添加一个"JVM退出"触发器,在JVM终止时保存快照。
  • 对于特殊情况,如"CPU负载阈值"触发器,或使用"定时器触发器"进行周期性的分析,在记录一些数据后保存快照,中间有一个"休眠"动作。

HPROF堆快照

在生成堆快照会产生太多开销或消耗太多内存的情况下,你可以使用JVM内置提供的HPROF堆快照功能。 因为这个操作不需要分析代理,所以对于分析在生产中运行的JVM内存问题很有用。

通过JProfiler,有三种方式可以获得这种快照:

  • 对于实时会话,JProfiler GUI在主菜单中提供了一个触发HPROF堆转储的操作。

  • JProfiler有一个特殊的"内存溢出异常"触发器,当OutOfMemoryError 被抛出时,会保存一个HPROF快照。 这对应于HotSpot JVM所支持的
    -XX:+HeapDumpOnOutOfMemoryError
    VM参数

  • JDK中的jmap可执行文件 可用于从运行的JVM中提取HPROF堆转储。

    JProfiler包含的命令行工具jpdump ,比jmap更通用。 它可以让你选择一个进程,可以连接到Windows上作为服务运行的进程,对32位/64位混合的JVM没有问题,并且自动编号HPROF快照文件。 使用-help选项执行它,以了解更多信息。

JDK飞行记录器快照

JProfiler完全支持打开由Java飞行记录器(JFR)保存的快照。在这种情况下,UI明显不同,根据JFR的功能进行了调整。 查看JFR帮助主题获取更多详细信息。