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