Snapshots——快照分析
到目前为止,我们只查看了JProfiler GUI从配置文件JVM中运行的性能分析代理获取数据的实时会话。JProfiler还支持将所有分析数据写入文件的快照。在以下几种情况下,这可能是有利的:
- 您可以自动记录分析数据,例如作为测试的一部分,以便无法连接JProfiler GUI。
- 您希望比较来自不同分析会话的分析数据或查看较旧的记录。
- 您想与其他人共享分析数据。
快照包括来自所有记录的数据,包括堆快照。为了节省磁盘空间,快照被压缩,但堆walker数据除外,它必须保持未压缩状态以允许直接内存映射。
一、Saving and opening snapshots in the JProfiler GUI
在分析实时会话时,可以使用“ *保存快照”*工具栏按钮创建快照。JProfiler从远程代理中提取所有分析数据,并将其保存到扩展名为“.jps”的本地文件中。您可以在实时会话过程中保存多个此类快照。它们不会自动打开,您可以继续进行配置。
保存的快照会自动添加到“ *文件” – >“最近快照”*菜单中,以便您可以方便地打开刚刚保存的快照。在实时会话仍在运行时打开快照时,您可以选择终止实时会话或打开另一个JProfiler窗口。
在JProfiler中使用快照比较功能时,将使用为当前实时会话保存的所有快照填充快照列表。这样可以轻松比较不同的用例。
通常,您可以通过从主菜单调用Session-> Open Snapshot或双击文件管理器中的快照文件来打开快照。JProfiler的IDE集成还支持通过IDE本身的通用Open File操作打开JProfiler快照。在这种情况下,您将源代码导航到IDE而不是内置的源代码查看器。
打开快照时,将禁用所有记录操作,并且只有具有记录数据的视图可用。要发现记录的数据类型,请将鼠标悬停在状态栏中的记录标签上。
二、Profiling short-lived programs
对于实时会话,所有分析数据都驻留在已分析的JVM的过程中。因此,当配置的JVM终止时,JProfiler中的配置文件会话也将关闭。要在JVM退出时继续进行性能分析,您有两个选项,可以在会话启动对话框中激活这两个选项。
- 只要连接了JProfiler GUI,您就可以阻止JVM实际退出并将其人为地保持活动状态。当您从IDE分析测试用例并希望在IDE的测试控制台中查看状态和总时间时,这可能是不合需要的。
- 您可以要求JProfiler在JVM终止时保存快照并立即切换到它。快照是临时的,在关闭会话时将被丢弃,除非您首先使用“ *保存快照”*操作。
三、Saving snapshots with triggers
自动分析会话的最终结果始终是快照或一系列快照。在触发器中,您可以添加“保存快照”操作,该操作将快照保存在运行已配置的JVM的计算机上。当触发器在实时会话期间运行时,快照也会保存在远程计算机上,并且可能不包括已传输到JProfiler GUI的部分数据。
使用触发器保存快照有两种基本策略:
- 对于测试用例,请在“JVM startup”触发器中开始记录,并添加“JVM exit”触发器以在JVM终止时保存快照。
- 对于“CPU负载阈值”触发器或带有“定时器触发器”的定期分析等特殊情况,请在记录一些数据后保存快照,并在其间执行“休眠”操作。
四、
HPROF堆快照
在捕获堆快照产生过多开销或消耗太多内存的情况下,您可以使用JVM提供的HPROF堆快照作为内置功能。由于此操作不需要性能分析代理,因此分析生产中运行的JVM中的内存问题非常有用。
使用JProfiler,有三种方法可以获得这样的快照:
- 对于实时会话,JProfiler GUI在主菜单中提供了一个操作来触发HPROF堆转储。
JProfiler有一个特殊的“Out of memory exception”触发器,用于OutOfMemoryError在抛出时保存HPROF快照 。这对应于 VM参数
1
2 1-XX:+ HeapDumpOnOutOfMemoryError
2
HotSpot JVM支持。
JDK中 的jmap可执行文件 可用于从正在运行的JVM中提取HPROF堆转储。
JProfiler包含jpdump比jmap更通用的命令行工具。它允许您选择一个进程,可以连接到在Windows上作为服务运行的进程,对混合的32位/ 64位JVM没有问题,并自动编号HPROF快照文件。使用该-help 选项执行它以获取更多信息。