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では使用できません。