如何识别 JFR 事件类型

Posted

技术标签:

【中文标题】如何识别 JFR 事件类型【英文标题】:How to identify JFR event types 【发布时间】:2021-06-29 07:22:14 【问题描述】:

我知道三种 JFR 事件类型:即时事件、持续时间事件和示例事件,但是。 我试着从配置中区分出来,但是好像不行,比如jdk.ObjectAllocationInNewTLAB,只需要配置是否启用,貌似是Instant Event,其实是Sample of the Event。

这对我很重要,因为我想用完整的信息而不是样本进行分析

【问题讨论】:

【参考方案1】:

您可以使用设置描述符查看事件类型支持的选项:

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 

【讨论】:

以上是关于如何识别 JFR 事件类型的主要内容,如果未能解决你的问题,请参考以下文章

如何创建可重用的即时(持续时间)Java Flight Recorder JFR 事件?

JDK14的新特性:JFR,JMC和JFR事件流

JDK14的新特性:JFR,JMC和JFR事件流

为啥 JFR 会跳过事件字段

显式设置 JFR 事件的持续时间

内置 JFR(Java Flight Recorder)事件记录在哪里?