java - 内置 JFR(Java 飞行记录器)事件记录在哪里?

标签 java java-11 jfr

使用 JDK 11,如果您查看 JRF 记录的摘要,您可以看到有 140 个不同的事件。其中一些可能没有发生,这在输出中清晰可见:

$ jfr summary /c/dev/jfrec/ddos.jfr

 Version: 2.0
 Chunks: 1
 Start: 2020-10-31 19:39:36 (UTC)
 Duration: 54 s

 Event Type                              Count  Size (bytes)
=============================================================
 jdk.JavaMonitorWait                      2727         79342
 jdk.NativeMethodSample                   2590         40722
 jdk.ThreadPark                           2125         89947
 ...
 jdk.GCHeapConfiguration                     1            30
 jdk.YoungGenerationConfiguration            1            21
 jdk.JavaMonitorInflate                      0             0
 jdk.ReservedStackActivation                 0             0
所有这些名称都类似于包 jdk 中的 Java 类。 .
另一方面,如果我想实现我自己的自定义 JFR 事件,我必须扩展 jdk.jfr.Event类,所以我想所有 jdk.*事件扩展 jdk.jfr.Event也。
在官方 Java SE Javadocs ( https://docs.oracle.com/en/java/javase/11/docs/api/index.html ) 中 jdk.jfr.Event已记录在案,但 jdk.*类(class)不是 .
如果不在官方 Java SE 平台 Javadocs 中,那么内置 JFR 事件类的官方文档放在哪里?

最佳答案

事件及其字段布局取决于 JDK 版本。
尽管事件名称看起来像包名称,但 JDK 中的大多数事件都不是使用 Java 类实现的。前缀“jdk”。仅用于将它们与用户定义的事件区分开来。
如果您想查看特定 JDK 支持的内容,可以使用“jfr”工具查看元数据。
JDK 11-16:

$ java -XX:StartFlightRecording:filename=m.jfr -version
$ jfr metadata m.jfr.
JDK 17 及更高版本:
$ jfr metadata 
输出将采用 Java 语法,即使实际事件是通过其他方式定义的。
@Name("jdk.CPUInformation")
@Category({"Operating System", "Processor"})
@Label("CPU Information")
class CPUInformation extends jdk.jfr.Event {
  @Label("Start Time")
  @Timestamp("TICKS")
  long startTime;

  @Label("Type")
  String cpu;

  @Label("Description")
  String description;

  @Unsigned
  @Label("Sockets")
  int sockets;

  @Unsigned
  @Label("Cores")
  int cores;

  @Unsigned
  @Label("Hardware Threads")
  int hwThreads;
}
(如果您对实现感兴趣,有一些本地事件是从 XML 描述生成的 C++ 类[1]。java.base/jdk.internal.event [2] 中的事件缺少元数据,但使用位于在 jdk.jfr/jdk.jfr.events [3] 中,您还可以在其中找到一些用 Java 实现的事件)。
[1] https://github.com/openjdk/jdk/blob/master/src/hotspot/share/jfr/metadata/metadata.xml
[2] https://github.com/openjdk/jdk/tree/master/src/java.base/share/classes/jdk/internal/event
[3] https://github.com/openjdk/jdk/tree/master/src/jdk.jfr/share/classes/jdk/jfr/events

关于java - 内置 JFR(Java 飞行记录器)事件记录在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64625969/

相关文章:

java - mongo模板查询文档数组

java - Spring启动Apache kafka Binder 项目,application.properties spring.cloud.stream.kafka.binder。 jaas 属性未知

java - 有没有办法将 CompletableFuture 放入循环中?

java - 我在 JMC 中看不到异常详细信息

Java Flight Recorder - 查找文件描述符泄漏

java - 如何从 float JToolBar 中删除/替换关闭按钮

java - 在 Maven Selenium 项目的 TFS 中找不到 chromedriver 可执行文件

java - parallelStream() 使用 JAXB-API 导致 ClassNotFoundException

java - 在 WSDL 中导入命名空间导致 JAXP09020006 : The argument 'systemId' can not be null

Java Flight Control - 保留最后 N 分钟记录数据