返回

使用 JFR 构建和运行原生可执行文件

JDK Flight Recorder (JFR) 是一个用于收集关于正在运行的 Java 应用程序的诊断和性能分析数据的工具,内置于 JVM 中。GraalVM Native Image 支持 JFR 事件,用户可以使用 jdk.jfr.Event API,与在 Java HotSpot VM 中使用 JFR 的体验类似。

要收集运行原生可执行文件时的 JFR 事件,请按照本指南中的说明启用 JFR 支持和 JFR 事件记录。

注意:JFR 事件记录在 Windows 上的 GraalVM JDK 中尚不可用。

启用 JFR 支持并在运行时记录事件

要构建具有 JFR 事件支持的原生可执行文件,请在调用 native-image 工具时添加 --enable-monitoring=jfr 选项,然后在运行时启动 JFR 记录。

按照以下步骤练习构建具有 JFR 支持并记录运行时事件的原生可执行文件。

先决条件

确保您已安装 GraalVM JDK。最简单的入门方法是使用 SDKMAN!。有关其他安装选项,请访问 下载部分

  1. 将以下代码保存到名为 JFRDemo.java 的文件中。
     import jdk.jfr.Event;
     import jdk.jfr.Description;
     import jdk.jfr.Label;
    
     public class JFRDemo {
    
       @Label("Hello World")
       @Description("Build and run a native executable with JFR.")
       static class HelloWorldEvent extends Event {
           @Label("Message")
           String message;
       }
    
       public static void main(String... args) {
           HelloWorldEvent event = new HelloWorldEvent();
           event.message = "Hello, World!";
           event.commit();
       }
     }
    

    此演示应用程序包含一个简单的类和 JDK 库类。它创建了一个事件,使用 jdk.jfr.* 包中的 @Label 进行注释。如果您运行此应用程序,它不会打印任何内容,只会运行该事件。

  2. 使用 GraalVM JDK 编译 Java 文件
     javac JFRDemo.java
    

    它会创建两个类文件:JFRDemo$HelloWorldEvent.classJFRDemo.class

  3. 构建具有启用 VM 检查的原生可执行文件
     native-image --enable-monitoring=jfr JFRDemo
    

    --enable-monitoring=jfr 选项启用 JFR 等可用于检查 VM 的功能。

  4. 运行可执行文件并开始记录
     ./jfrdemo -XX:StartFlightRecording=filename=recording.jfr
    

    此命令将应用程序作为原生可执行文件运行。-XX:StartFlightRecording 选项启用内置的 Flight Recorder 并开始记录到指定的二进制文件 recording.jfr。此外,您还可以通过传递 -XX:FlightRecorderLogging 运行时选项来配置 JFR 的日志输出。

  5. 启动 VisualVM 以以用户友好的方式查看记录文件的内容。

  6. 转到文件,然后添加 JFR 快照,浏览 recording.jfr 并打开所选文件。确认显示名称,然后单击确定。打开后,您可以检查多个选项(例如监控、线程和异常),但您最感兴趣的是浏览事件。它看起来像这样

    JDK Flight Recorder

    或者,您可以通过运行以下命令在控制台窗口中查看记录文件的内容

     jfr print recording.jfr
    

    它打印 Flight Recorder 记录的所有事件。

与我们联系