JProfiler帮助文档Download

使用JProfiler记录JFR快照


得益于在生产环境JVM中运行JFR的开销非常小,和并不要求启用分析接口这些好处,在UI中JProfiler直接支持JFR记录。 虽然你可以通过编程的方式,或通过在命令行添加-XX:StartFlightRecordingVM参数的方式启动JFR, 但JProfiler可以帮助你启动和停止已经在运行的JVM的记录。

当你通过JProfiler Attach到一个JVM,你可以选择启动和停止JFR记录,而不是加载本地分析代理。通过JProfiler全面的远程连接能力, 你可以,例如,启动运行在Docker或Kubernets容器中的JVM中的JFR记录,而不需要修改容器。

启动和停止JFR记录

在启动中心的“快速Attach”选项卡上,选择一个JVM,然后点击对话框底部的启动JFR按钮。 截图中显示的是本地运行的JVM,当你Attach到一个远程JVM时也是使用相同按钮。

在JFR设置向导中,你可以选择一个事件设置模板,这些模板是从选定进程使用的JRE的lib/jfr路径下传输过来的。 默认情况下,有两个这样的模板,“默认”和“分析(profile)”,分析(profile)模板会记录更多数据,也会增加更多开销。 如果你在那个目录下创建了其他文件,你可以在向导中选择相应的模板。

这些模板文件包含可用的事件,以及重要高级(high-level)设置的配置指令。每一个高级设置可以与多个不同的事件关联起来。这个用户界面(UI) 根据模板的内容自动生成。在不同的配置文件之间切换会显示不同的默认值。还有很多事件类型没有包含在这个UI中,只能在下一步配置。

如果你已经为一个JVM启动了一个JFR记录,并且使用了完全相同的事件类型,JProfiler会为你提供一个使用上一次的设置的选项。

如果选择这个选项,高级(high-level)记录设置将不可用,你可以继续到下一步查看整个配置,然后做进一步修改。

向导这一步上的另一个重要设置是最大快照大小。由于JFR记录的性质,快照的大小增加的非常快速,有可能会占满你的整个硬盘。 为避免发生这种情况,限制最大快照大小,可以防止存储利用率过高。当达到最大大小时,旧的事件会被丢弃,新的事件依然会被记录下来。 这整个处理是JFR的一个自动化机制。

在向导得下一步,你可以看到所有事件类型得一个分类树,以及在右侧每一个事件得进一步配置。

事件有关于周期(period)阈值和是否为每个事件记录堆栈的选项设置。周期和阈值的设置都有一个时间单位, 你可以按下(down)键,会有一个可用单位的补全弹窗。周期还支持一些特殊值“每个数据块(everyChunk)”,“数据库开始(beginChunk)”和 “数据库结束(endChunk)”,这些值也包含在补全弹窗中。一个数据块是包含连续事件数据和元数据的JFR记录的一部分, 它是记录的存储和数据传输的基本单位。

在树中选择的事件越多,记录的数据就越多。有些事件类型会生成大量数据,而有些只生成少量事件。

不像完整的分析或“仅堆转储”模式,在UI中你可以马上看到一些数据。当表格中的JVM没有被选中时,启动JFR快照只会修改其背景色,以便 你可以看到JProfiler已经启动了一个记录。当JVM被选中时,底部JFR按钮的文字会告诉你,记录将被停止。

当你停止一个通过JProfiler启动的JFR记录时,一个JFR快照会被传输并在JProfiler中打开。这个快照是临时性的,当你关闭窗口时它 会被删除。使用工具栏中的“保存快照”,可以将快照长久保存到一个位置。

带有JFR记录的已停止JVM

JFR的一个被提及的用处是,调查奔溃前的瞬间。在这种情况下,无法通过JVM表格中的JVM,停止JFR记录和打开快照。如果一个在JProfiler中被 启动的JFR记录,在你停止记录之前其JVM终止了,一个以“终止的JFR:”为前缀的条目会被添加到JVM表格中。通过双击该条目或使用“JFR”按钮,你 可以打开其JFR快照。

一旦你打开该条目,它会被从列表中移除。就像记录是被手动停止的,被打开的JFR快照是临时性的,如果你想要以后的分析中使用它, 必须保存它。

Showing externally started JFR recordings

在上边的例子中,JFR记录是在JProfiler中启动的。也可以显示,在JProfiler外启动的JFR记录。 可以使用一个JVM参数轻松启动连续JFR记录,例如

"-XX:StartFlightRecording=maxsize=500m=filename=$TEMP/myapp.jfr,name=Continuous recording"

在JVM表格中,通过特殊的背景色来标示正在运行的JFR记录,只适用于在JProfiler中启动的JFR记录。如果你连接到的JVM其JFR记录 是通过其他方式启动的,会显示另一个对话窗口。

现在在JProfiler中你可以选择启动一个新记录,或转储一个已经存在的记录,并在JProfile中显示生成的JFR快照。 外部启动的JFR记录有独立的生命周期,不会被JProfiler停止。