jcmd
ユーティリティで提供される診断コマンドを使用して、Java Flight Recorderを制御できます。
jcmd
ユーティリティは、実行中のJavaプロセスに診断コマンド要求を送信する際に使用されます。診断コマンドに関する情報は、help
パラメータを使用して入手できます。実行中のJavaプロセスのプロセスIDが必要です。
使用できる診断コマンドのリストを表示する場合は、コマンド名を含めないでください。たとえば、次のコマンドでは、IDが10568のプロセスのための診断コマンドが表示されます。
jcmd 10568 help
特定の診断コマンドの情報を表示するには、help
パラメータの後にコマンド名を指定します。たとえば、次のコマンドは、ID 5361のプロセスのJFR.start
診断コマンドに関する情報を要求します。
jcmd 5361 help JFR.start
Java Flight Recorderでは次の診断コマンドが使用できます。
フライト記録のパラメータを設定するには、jcmd
ユーティリティのJFR.configure
診断コマンドを使用します。
表2-1は、JFR.configure
コマンドのパラメータを示しています。すべてのパラメータはオプションです。パラメータを入力しなかった場合、現在の設定が表示されます。
表2-1 JFR.configureのパラメータ
パラメータ | 説明 | 値の型 | デフォルト |
---|---|---|---|
|
グローバル・バッファの数。 |
Long |
デフォルト値は、 |
|
グローバル・バッファのサイズ(バイト単位)。 |
Long |
デフォルト値は、 |
|
各データ・チャンクの最大サイズ(バイト単位) |
Long |
12582912 |
|
メモリー全体のサイズ(バイト単位) |
Long |
10485760 |
|
常設ファイルに書き込まれるまで記録を格納しておく場所のパス |
String |
デフォルトの場所は、オペレーティング・システムの一時ディレクトリです。Oracle SolarisおよびLinuxオペレーティング・システムの一時ディレクトリは |
|
スタック・トレースのスタックの深さ |
Long |
64 |
|
各スレッドのローカル・バッファ・サイズ(バイト単位)。このパラメータをオーバーライドするとパフォーマンスが低下する可能性があるため、お薦めしません。 |
Long |
8192 |
|
バッファ・スレッドがブロックされた場合にスレッド・バッファをディスクに直接書き込めるようにするフラグ |
Boolean |
false |
|
スレッドのサンプリングをアクティブ化するフラグ |
Boolean |
true |
例2-1 JFR.configureの例
次のコマンドは、Java Flight Recorderが記録をD:\jfr\recordings
に格納するように構成します。pidの値は、記録するJavaプロセスのプロセスIDです。
jcmd pid JFR.configure repositorypath=D:\jfr\recordings
フライト記録を開始するには、jcmd
ユーティリティのJFR.start
診断コマンドを使用します。
表2-2は、JFR.start
コマンドのパラメータを示しています。すべてのパラメータはオプションです。パラメータを入力しない場合は、デフォルト値を使用して記録が開始されます。
表2-2 JFR.startのパラメータ
パラメータ | 説明 | 値の型 | デフォルト |
---|---|---|---|
|
記録を開始するまで待機する時間 |
整数の後に、秒の |
0s |
|
記録中にディスクにデータを書き込むためのフラグ |
Boolean |
true |
|
Java Virtual Machine (JVM)のシャットダウン時に記録をディスクに書き込むためのフラグ。これが |
Boolean |
false |
|
記録する時間 |
整数の後に、秒の |
0s (無制限) |
|
記録が停止されるときに、記録が書き込まれるファイルの名前。パスを指定しない場合、ファイルは、プロセスが開始されたディレクトリに配置されます。ファイル名の例:
|
String |
デフォルト値なし |
|
記録されたデータをディスクに保存する最大時間。このパラメータは、 |
整数の後に、秒の |
0s (無制限) |
|
ディスクに保存するデータの最大サイズ(次のいずれの接尾辞も使用されない場合はバイト単位)。
このパラメータは、 |
Long |
0 (最大サイズはなし) |
|
記録の名前。名前を指定しないと名前が生成されます。生成された名前はコマンドのレスポンスに表示されるので、他のコマンドで使用できるようにメモしておきます。 |
String |
デフォルトはシステム生成名です。 |
|
記録の終了時にガベージ・コレクション(GC)のルートへのパスを収集するためのフラグ。このフラグは、JDK 10で導入されました。 パス情報はメモリー・リークを探すのに役立ちますが、この収集には時間がかかります。メモリー・リークが疑われるアプリケーションの記録を開始する場合にのみ、このフラグをオンにします。 |
Boolean |
false |
|
記録するイベントを指定する設定ファイルの名前。複数のファイルを指定するには、名前をカンマ(,)で区切ります。ファイルが
設定ファイル名の例:
|
String |
|
例2-2 JFR.startの例
次のコマンドは、1分間実行する記録を開始し、profile
という設定ファイルを使用して記録対象のイベントを指定し、d:\recordings\page-load.jfr
という名前のファイルに記録を書き込みます。name
パラメータが指定されていないため、システム生成名が使用されます。pidの値は、記録するJavaプロセスのプロセスIDです。
jcmd pid JFR.start duration=1m settings=profile filename=d:\recordings\page-load.jfr
次のコマンドは、最大1時間データを保存するmonitor1hour
という名前の記録を開始し、記録のサイズを500MBに制限します。pidの値は、記録するJavaプロセスのプロセスIDです。
jcmd pid JFR.start name=monitor1hour maxage=1h maxsize=500M
実行中のフライト記録に関する情報を表示するには、jcmd
ユーティリティのJFR.check
診断コマンドを使用します。
表2-3は、JFR.check
コマンドのパラメータを示しています。すべてのパラメータはオプションです。パラメータを入力しない場合は、すべてのアクティブな記録の情報が表示されます。
表2-3 JFR.checkのパラメータ
パラメータ | 説明 | 値の型 | デフォルト |
---|---|---|---|
|
記録の名前 |
String |
デフォルト値なし |
|
記録のイベント設定を出力するためのフラグ |
Boolean |
false |
例2-3 JFR.checkの例
次のコマンドは、Recording-1
という名前の記録の情報を表示します。pidの値は、記録されているJavaプロセスのプロセスIDです。
jcmd pid JFR.check name=Recording-1
フライト記録を停止するには、jcmd
ユーティリティのJFR.stop
診断コマンドを使用します。
表2-4は、JFR.stop
コマンドのパラメータを示しています。すべてのパラメータはオプションです。ただし、名前を入力しないと記録は停止されません。
表2-4 JFR.stopのパラメータ
パラメータ | 説明 | 値の型 | デフォルト |
---|---|---|---|
|
記録が停止されるときに、記録が書き込まれるファイルの名前。パスを指定しない場合、ファイルは、プロセスが開始されたディレクトリに配置されます。ファイル名の例:
|
String |
デフォルト値なし |
|
記録の名前 |
String |
デフォルト値なし |
例2-4 JFR.stopの例
次のコマンドは、debugrun1
という名前の記録を停止し、プロセスが開始されたディレクトリ内のdebugrun1.jfr
に記録を書き込みます。pidの値は、記録されているJavaプロセスのプロセスIDです。
jcmd pid JFR.stop name=debugrun1 filename=debugrun1.jfr
フライト記録の実行中にデータをファイルに書き込むには、jcmd
ユーティリティのJFR.dump
診断コマンドを使用します。
表2-5は、JFR.dump
コマンドのパラメータを示しています。name
パラメータとfilename
パラメータは必須です。データが書き込まれた後も記録の実行は継続します。
表2-5 JFR.dumpのパラメータ
パラメータ | 説明 | 値の型 | デフォルト |
---|---|---|---|
(必須) |
記録が書き込まれるファイルの名前。パスを指定しない場合、ファイルは、プロセスが開始されたディレクトリに配置されます。ファイル名の例:
|
String |
デフォルト値なし |
(必須) |
記録の名前 |
String |
デフォルト値なし |
|
記録データが出力されるときにガベージ・コレクション(GC)のルートのパスを収集するためのフラグ。このフラグは、JDK 10で導入されました。 この情報はメモリー・リークを探すのに役立ちますが、収集すると、アプリケーションが短期間一時停止する可能性があります。実行中のアプリケーションでメモリー・リークの疑いがある場合は、このフラグを使用して情報を収集すれば、別の記録を開始する必要がありません。 |
Boolean |
false |
例2-5 JFR.dumpの例
次のコマンドは、monitor1hour
という名前の記録を/usr/testsamples/recordings/monitor1hour-halfway.jfr
という名前のファイルに書き込みます。pidの値は、記録されているJavaプロセスのプロセスIDです。
jcmd pid JFR.dump name=monitor1hour filename=/usr/testsamples/recordings/monitor1hour-halfway.jfr
すでに実行しているJavaプロセスの商用機能をロック解除するには、jcmd
ユーティリティのVM.unlock_commercial_features
診断コマンドを使用します。
VM.unlock_commercial_features
コマンドにはパラメータはありません。次の例は、商用機能をロック解除するコマンドです。pidの値はJavaプロセスのプロセスIDです。
jcmd pid VM.unlock_commercial_features