【发布时间】:2021-06-29 07:22:14
【问题描述】:
我知道三种 JFR 事件类型:即时事件、持续时间事件和示例事件,但是如何识别 JFR 事件类型。 我试着从配置中区分出来,但是好像不行,比如jdk.ObjectAllocationInNewTLAB,只需要配置是否启用,貌似是Instant Event,其实是Sample of the Event。
这对我很重要,因为我想用完整的信息而不是样本进行分析
【问题讨论】:
我知道三种 JFR 事件类型:即时事件、持续时间事件和示例事件,但是如何识别 JFR 事件类型。 我试着从配置中区分出来,但是好像不行,比如jdk.ObjectAllocationInNewTLAB,只需要配置是否启用,貌似是Instant Event,其实是Sample of the Event。
这对我很重要,因为我想用完整的信息而不是样本进行分析
【问题讨论】:
您可以使用设置描述符查看事件类型支持的选项:
for(EventType type : FlightRecorder.getFlightRecorder().getEventTypes()) {
System.out.println(type.getName());
System.out.println("Settings:");
for (SettingDescriptor s : type.getSettingDescriptors()) {
String def = " (default: " + s.getDefaultValue() + ")";
System.out.println(" " + s.getName() + def);
}
System.out.println();
}
还可以使用位于 JAVA_HOME/bin 中的“jfr”工具列出事件元数据,包括设置。对于 JDK 11,您必须提供要为其打印元数据的文件:
$ jfr metadata recording.jfr
对于 JDK 17,您可以省略该文件,您将获得该工具所在的 JDK 的事件类型:
$ jfr metadata
【讨论】: