JFRによるネイティブ実行可能ファイルのビルドおよび実行
JDK Flight Recorder (JFR)は、JVMに組み込まれている、実行中のJavaアプリケーションに関する診断およびプロファイリングのデータを収集するツールです。GraalVMネイティブ・イメージはJFRイベントをサポートしており、ユーザーは、Java HotSpot VMでJFRを使用する場合と同様に、jdk.jfr.Event
APIを使用できます。
ネイティブ実行可能ファイルの実行時にJFRイベントを記録するには、このガイドの説明に従ってJFRサポートとJFR記録を有効にします。
ノート: JFRイベントの記録は、WindowsのGraalVM JDKではまだサポートされていません。
実行時のJFRサポートおよびイベントの記録の有効化
JFRイベントがサポートされるネイティブ実行可能ファイルをビルドするには、まず、native-image
ツールを起動するときに--enable-monitoring=jfr
オプションを追加する必要があります。次に、システムを有効にし、記録を開始し、ネイティブ実行可能ファイルの実行時にロギングを構成する必要があります。
-XX:+FlightRecorder
: 実行時にJFRを有効化するために使用します-XX:StartFlightRecording
: アプリケーションの起動時に記録を開始するために使用します-XX:FlightRecorderLogging
: JFRシステムのログ出力の構成に使用します
次のステップに従って、JFRをサポートするネイティブ実行可能ファイルをビルドし、実行時にイベントを記録します。
ノート: GraalVM JDKがインストール済であることを確認します。最も簡単に始めるには、SDKMAN!を使用します。その他のインストール・オプションについては、「ダウンロード」セクションを参照してください。
- 次を実行してVisualVMをインストールします:
gu install visualvm
-
次のコードを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ライブラリ・クラスで構成されます。これは、
@Label
注釈のラベルが付いたイベントをjdk.jfr.*
パッケージから作成します。このアプリケーションを実行すると、何も出力されず、そのイベントが実行されるだけです。 - GraalVM JDKを使用してJavaファイルをコンパイルします:
$JAVA_HOME/bin/javac JFRDemo.java
JFRDemo$HelloWorldEvent.class
およびJFRDemo.class
の2つのクラス・ファイルが作成されます。 - VM検査を有効にしてネイティブ実行可能ファイルをビルドします:
$JAVA_HOME/bin/native-image --enable-monitoring=jfr JFRDemo
--enable-monitoring=jfr
オプションによって、VMの検査に使用できるJFRなどの機能が有効になります。 - 実行可能ファイルを実行し、記録を開始します:
./jfrdemo -XX:StartFlightRecording="filename=recording.jfr"
このコマンドは、アプリケーションをネイティブ実行可能ファイルとして実行します。
-XX:StartFlightRecording
オプションは、組込みフライト・レコーダを有効にして、指定したバイナリ・ファイルrecording.jfrへの記録を開始します。 -
VisualVMを起動して、記録ファイルの内容をわかりやすい方法で表示します。GraalVMは、コア・インストールでVisualVMを提供します。ツールを起動するには、次を実行します:
$JAVA_HOME/bin/jvisualvm
-
「File」、「Add JFR Snapshot」の順に移動し、recording.jfrを参照して、選択したファイルを開きます。表示名を確認し、「OK」をクリックします。開くと、モニタリング、スレッド、例外など、チェックできるいくつものオプションが表示されますが、イベントの参照を確認することをお薦めします。次のようになります:
または、次のコマンドを実行して、記録ファイルの内容をコンソール・ウィンドウに表示できます:
$JAVA_HOME/bin/jfr print recording.jfr
Flight Recorderにより記録されたすべてのイベントが出力されます。
関連ドキュメント
-
JFRイベントのネイティブ・イメージ・サポートの詳細と、JFR記録およびシステム・ロギングをさらに構成する方法について学習します。