返回

使用 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 選項會啟用可用於檢視 VM 的功能,例如 JFR。

  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 所記錄的所有事件。

與我們聯繫