Java診断コマンド(jcmd)とネイティブ・イメージ

ネイティブ・イメージで、Java診断コマンド(jcmd)がサポートされるようになりました。ユーザーはJavaアプリケーションに使用するのと同じjcmdツールを使用してネイティブ実行可能ファイルと対話できます。このサポートは、JDK Flight Recorder、ヒープ・ダンプ、ネイティブ・メモリー・トラッキングなど、既存のネイティブ・イメージのモニタリング機能を補完します。

jcmdサポートの有効化

jcmdのサポートはデフォルトでは無効化されており、ビルド時に明示的に有効化する必要があります。

--enable-monitoring=jcmdオプションを使用して、jcmdを有効にしてネイティブ実行可能ファイルをビルドします。

native-image --enable-monitoring=jcmd YourApplication

jcmdのサポートを有効にする場合、JDK Flight Recorderやヒープ・ダンプなどの追加のモニタリング機能を含めることもできます。ネイティブ・イメージのビルド・プロセス中に複数のモニタリング機能を含めると、実行時により多くの診断コマンドへのアクセスがロック解除されます。たとえば:

native-image --enable-monitoring=jcmd,jfr,heapdump YourApplication

実行時にjcmdを使用するには、通常どおりネイティブ実行可能ファイルを起動し、そのプロセスID (PID)を取得します。PIDを指定してjcmdを使用し、実行中のネイティブ・アプリケーションに接続できます。たとえば、特定の実行可能ファイルで使用可能なコマンドをリストするには、jcmd <pid> helpを実行します。

jcmd 388454 help

388454:
The following commands are available:
GC.heap_dump
GC.run
JFR.start
JFR.stop
JFR.check
JFR.dump
Thread.dump_to_file
Thread.print
VM.command_line
VM.native_memory
VM.system_properties
VM.uptime
VM.version
help

For more information about a specific command use 'help <command>'.

jvmstatモニタリング機能も有効にすると、jcmd -lまたは引数を指定しないjcmdでネイティブ実行可能ファイルが検出されてリストされ、有用です。

native-image --enable-monitoring=jcmd,jvmstat YourApplication
jcmd -l
1455557 YourApplication
1455667 jdk.jcmd/sun.tools.jcmd.JCmd -l

サポートされている診断コマンド

次のキーと値のペアがサポートされています:

名前 --enable-monitoring=での指定 説明
Compiler.dump_code_cache Truffleランタイム・コンパイルでのみ使用可能 コード・キャッシュ内のすべてのコンパイル済メソッドに関する情報を出力します。
GC.heap_dump heapdump JavaヒープのHPROF形式のダンプを生成します。
GC.run 常に使用可能 java.lang.System.gc()をコールします。
JFR.start jfr 新しいJFR記録を開始します。
JFR.stop jfr JFR記録を停止します
JFR.check jfr 実行中のJFRの記録をチェックします。
JFR.dump jfr JFR記録の内容をファイルにコピーします。名前または記録IDのいずれかを指定する必要があります。
Thread.dump_to_file 常に使用可能 スレッドをスタック・トレース付きでプレーン・テキストまたはJSON形式のファイルにダンプします。
Thread.print 常に使用可能 すべてのスレッドをスタック・トレース付きで出力します。
VM.command_line 常に使用可能 このVMインスタンスの起動に使用されたコマンドラインを出力します。
VM.native_memory nmt ネイティブ・メモリー使用状況を出力します。
VM.system_properties 常に使用可能 システム・プロパティを出力します。
VM.uptime 常に使用可能 VMの稼働時間を出力します。
VM.version 常に使用可能 JVMバージョン情報を出力します。
help 常に使用可能 ヘルプ情報を表示します。

パフォーマンス

ネイティブ・イメージへのjcmdサポートの追加によるパフォーマンスへの影響は、アプリケーションがアイドル状態の場合は最小限です。ただし、使用される診断コマンドおよび起動頻度によってパフォーマンスへの影響は大きく異なります。たとえば、複数のガベージ・コレクションをトリガーすると、単一のネイティブ・メモリー・トラッキング・レポートをダンプするよりもはるかに大きなオーバーヘッドが発生します。jcmd <pid> help <command>を使用すると、特定のコマンドのヘルプ情報を出力でき、予想されるパフォーマンスへの影響も一覧表示されます。

制限事項

現在、この機能はWindowsでは使用できません。

その他の情報