JFR 配置改进
Billy Korando,2022 年 6 月 13 日
JDK Flight Recorder(JFR)是内置于 JDK 中的基于事件的诊断和分析工具!JFR 可以提供有关应用程序和 JVM 本身中发生的事情的详细信息。这可能是调试问题和查找提高性能的方法的好方法。但是,JFR 返回的数据可能并不总是符合你的需求。幸运的是,JFR 具有高度可配置性,并且 JDK 17 中引入的几项更改使配置 JFR 比以往任何时候都更加容易。
交互式向导
JDK 17 中添加了一个新的交互式向导,可以指导你创建新的 JFR 配置文件 (.jfc
)。要启动向导,请从终端运行 jfr configure --interactive
。这将启动一个 12 步向导过程来创建新配置。提示将指导默认收集配置文件的外观,以及增加收集的数据量对性能的潜在影响
============== .jfc Configuration Wizard ============
This wizard will generate a JFR configuration file by
asking 12 questions. Press ENTER to use the default
value, or type Q to abort the wizard.
Garbage Collector: Normal (default)
1. Off
2. Normal
3. Detailed
4. High, incl. TLABs/PLABs (may cause many events)
5. All, incl. Heap Statistics (may cause long GCs)
直接提交配置
对于 JFR 的新用户来说,交互式向导可能会有所帮助,但对于更高级的用户来说,完成 12 步流程可能是一种负担,特别是如果你只对更改一些设置感兴趣。幸运的是,你可以直接传递配置值
jfr configure <configuration values>
未提供的值将设置为默认值。
如果你需要使用 jfr configure
的帮助,请运行 jfr configure help
以将帮助消息打印到控制台。
配置和添加事件
可以配置各个事件,以及添加自定义事件。
要配置事件,你需要引用事件名称、#
要更改的字段以及要设置的值,如下面的示例所示
jfr configure jdk.JavaMonitorEnter#threshold=1ms
如果你想添加和配置自定义 JFR 事件,请使用 +
追加上述内容
jfr configure +my.events.MyEvent#threshold=1ms
使用 -XX:StartFlightRecording 进行配置
你还可以使用 -XX:StartFlightRecording
在 JVM 启动时设置这些配置,如下面的示例所示
$ java -XX:StartFlightRecording:allocation-profiling=high
$ java -XX:StartFlightRecording:+com.company.HttpGetRequest#enabled=true
性能
请注意,使用 JFR 的默认设置测量 JFR 目标 <1% 的开销。更改 JFR 的配置可能导致开销增加。
其他阅读材料
编码愉快!