◀返回
使用 JFR 构建和运行原生可执行文件
JDK Flight Recorder (JFR) 是一个用于收集正在运行的 Java 应用程序的诊断和分析数据的工具,内置于 JVM。GraalVM 原生镜像 (Native Image) 支持 JFR 事件,用户可以使用 jdk.jfr.Event
API,获得与在 Java HotSpot VM 中使用 JFR 相似的体验。
要在运行原生可执行文件时收集 JFR 事件,请按照本指南所述启用 JFR 支持和 JFR 事件记录。
注意:JFR 事件记录功能尚未在 Windows 上的原生镜像 (Native Image) 中提供。
在运行时启用 JFR 支持并记录事件
要构建支持 JFR 事件的原生可执行文件,请在调用 native-image
工具时添加 --enable-monitoring=jfr
选项,然后在运行时启动 JFR 记录。
请按照以下步骤练习构建支持 JFR 的原生可执行文件并在运行时记录事件。
前提条件
确保您已安装 GraalVM JDK。最简单的入门方法是使用 SDKMAN!。对于其他安装选项,请访问下载部分。
- 将以下代码保存到名为 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
进行标注。如果您运行此应用程序,它不会打印任何内容,只会运行该事件。 - 使用 GraalVM JDK 编译应用程序
javac JFRDemo.java
它会创建两个类文件:JFRDemo$HelloWorldEvent.class 和 JFRDemo.class。
- 构建一个启用 VM 检查功能的原生可执行文件
native-image --enable-monitoring=jfr JFRDemo
--enable-monitoring=jfr
选项启用了 JFR 等可用于检查 VM 的功能。 - 运行可执行文件并开始记录
./jfrdemo -XX:StartFlightRecording=filename=recording.jfr
此命令将应用程序作为原生可执行文件运行。
-XX:StartFlightRecording
选项启用内置的 Flight Recorder 并开始记录到一个指定的二进制文件 recording.jfr 中。此外,您可以通过传递-XX:FlightRecorderLogging
运行时选项来配置 JFR 的日志输出。 -
启动 VisualVM 以用户友好的方式查看记录文件的内容。
-
导航到文件,然后选择添加 JFR 快照,浏览 recording.jfr 并打开所选文件。确认显示名称并单击确定。打开后,您可以查看多个选项(例如“监控”、“线程”和“异常”),但您最感兴趣的是浏览事件。它看起来像这样
或者,您可以通过运行此命令在控制台窗口中查看记录文件的内容
jfr print recording.jfr
它会打印 Flight Recorder 记录的所有事件。
相关文档
- 了解更多关于 原生镜像 (Native Image) 对 JFR 事件的支持 以及如何进一步配置 JFR 记录和系统日志。