JFR 配置改进

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 的配置可能导致开销增加。

其他阅读材料

编码愉快!