◀返回
使用 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!。如需其他安裝選項,請造訪下載區。
- 將以下程式碼儲存至名為 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 編譯 Java 檔案
javac JFRDemo.java
它會建立兩個類別檔案:JFRDemo$HelloWorldEvent.class 和 JFRDemo.class。
- 建置啟用 VM 檢視的原生執行檔
native-image --enable-monitoring=jfr JFRDemo
--enable-monitoring=jfr
選項會啟用可用於檢視 VM 的功能,例如 JFR。 - 執行執行檔並開始記錄
./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 記錄和系統記錄。
- 使用 Java 建立並記錄您的第一個事件.