第4章 JDK Flight Recorder の設定オプション

コマンドラインまたは診断コマンドを使用して、JDK Flight Recorder (JFR) を設定して、さまざまなイベントセットをキャプチャーできます。

4.1. コマンドラインを使用した JDK Flight Recorder の設定

以下のオプションを使用すると、コマンドラインから JDK Flight Recorder (JFR) を設定できます。

4.1.1. JFR の起動

-XX:StartFlightRecording オプションを使用して、Java アプリケーションの JFR の録画を開始します。以下に例を示します。

java -XX:StartFlightRecording=delay=5s,disk=false,dumponexit=true,duration=60s,filename=myrecording.jfr <<YOUR_JAVA_APPLICATION>>

JFR 録画の開始時に、以下の parameter=value エントリーを設定できます。

delay=time
このパラメーターを使用して、Java アプリケーションの起動時間から録画の開始までの遅延を指定します。時間で (秒の場合は s)、分 (分の場合は m)、h (日の場合は d) を指定する場合には s を追加します。たとえば、10m を指定すると 10 分になります。デフォルトでは遅延がなく、このパラメーターは 0 に設定されます。
disk={true|false}
このパラメーターを使用して、録画中にディスクにデータを書き込むかどうかを指定します。デフォルトでは、このパラメーターは true です。
dumponexit={true|false}
このパラメーターを使用して、JVM シャットダウン時に実行中の録画がダンプされるかどうかを指定します。パラメーターが有効になり、ファイル名が設定されていない場合、録画の進捗は、録画の進捗が開始されたディレクトリー内のファイルに記録が書き込まれます。ファイル名は、プロセス ID、記録 ID、および現在のタイムスタンプを含むシステム生成名です。例: hotspot-pid-47496-id-1-2018_01_25_19_10_41.jfrデフォルトでは、このパラメーターは false です。
duration=time
このパラメーターを使用して、記録期間を指定します。時間で (秒の場合は s)、分 (分の場合は m)、h (日の場合は d) を指定する場合には s を追加します。たとえば、期間を 5h に指定した場合は、5 時間を示します。デフォルトでは、このパラメーターは 0 に設定されています。これは、録画期間に無制限を意味します。
filename=path

このパラメーターを使用して、録画ファイルのパスと名前を指定します。停止時にこのファイルに記録が書き込まれます。以下に例を示します。

IncomeSource recording.jfr

· /home/user/recordings/recording.jfr

name=identifier
このパラメーターを使用して、記録の名前と録画の識別子を指定します。
maxage=time
このパラメーターを使用して、ディスク上で録画可能な最大日数を指定します。このパラメーターは、disk パラメーターが true に設定されている場合にのみ有効です。時間で (秒の場合は s)、分 (分の場合は m)、h (日の場合は d) を指定する場合には s を追加します。たとえば、30s を指定する場合、これは 30 秒を示します。デフォルトでは、このパラメーターは 0 に設定されています。これは、制限が設定されていないことを意味します。
maxsize=size
このパラメーターを使用して、録画用に保持するディスクデータの最大サイズを指定します。このパラメーターは、disk パラメーターが true に設定されている場合にのみ有効です。この値は、-XX:FlightRecorderOptions で設定した maxchunksize パラメーターの値よりも小さくすることはできません。サイズをメガバイト単位で指定する場合は m または M を追加するか、サイズがギガバイトで指定する g または G を指定します。デフォルトでは、ディスクデータの最大サイズは制限されず、このパラメーターは 0 に設定されます。
path-to-gc-roots={true|false}

このパラメーターを使用して、録画の最後でガベッジコレクション (GC) ルートへのパスを収集するかどうかを指定します。デフォルトでは、このパラメーターは false に設定されます。

GC ルートへのパスは、メモリーリークを見つけるのに便利です。OpenJDK 8 では、ヒープダンプの使用よりも効率的であり、古い ObjectSample イベントを有効にできます。実稼働環境で OldObjectSample イベントを使用することもできます。メモリーリーク情報の収集には時間がかかり、追加のオーバーヘッドが発生します。このパラメーターは、メモリーリークがあるアプリケーションの録画を開始する場合にのみ有効にする必要があります。JFR プロファイルパラメーターがプロファイルに設定されている場合、オブジェクトのリークが発生した場所からスタックを追跡できます。収集された情報に含まれます。

settings=path
このパラメーターを使用して、イベント設定ファイルのパスおよび名前を指定します (JFC のタイプは JFC)。デフォルトでは、JAVA_HOME/lib/jfr にある default.jfc ファイルが使用されます。このデフォルト設定ファイルはオーバーヘッドが低い事前定義の情報を収集するため、パフォーマンスへの影響が最小限であり、継続して実行される記録に使用できます。2 番目の設定ファイルも提供されています。profile.jfc はデフォルト設定よりも多くのデータを提供しますが、オーバーヘッドが増え、パフォーマンスに影響を与える可能性があります。詳細情報が必要な場合に短い期間にこの設定を使用します。
注記

複数のパラメーターの値をコンマで区切ります。例: -XX:StartFlightRecording=disk=falsename=example-recording

4.1.2. JFR の動作の制御

-XX:FlightRecorderOptions オプションを使用して、JFR の動作を制御するパラメーターを設定します。以下に例を示します。

java -XX:FlightRecorderOptions=duration=60s,filename=myrecording.jfr -XX:FlightRecorderOptions=stackdepth=128,maxchunksize=2M <<YOUR_JAVA_APPLICATION>>

以下の parameter=value エントリーを設定して、JFR の動作を制御できます。

globalbuffersize=size
このパラメーターを使用して、データの保持に使用するプライマリーメモリーの合計量を指定します。デフォルト値は、memorysize に指定された値に基づいています。memorysize パラメーターを変更して、グローバルバッファーのサイズを変更できます。
maxchunksize=size
このパラメーターを使用して、データチャンクの最大サイズを指定します。サイズをメガバイト単位 (MB) で指定する場合は m または M を追加するか、サイズがギガバイト (GB) で指定する g または G を指定します。デフォルトでは、データチャンクの最大サイズは 12 MB に設定されています。許可される最小値は 1 MB です。
memorysize=size
このパラメーターを使用して、使用するバッファーメモリー容量を決定します。このパラメーターは、指定したサイズに基づいて globalbuffersize パラメーターおよび numglobalbuffers パラメーターを設定します。サイズをメガバイト単位 (MB) で指定する場合は m または M を追加するか、サイズがギガバイト (GB) で指定する g または G を指定します。デフォルトでは、メモリーサイズは 10 MB に設定されています。
numglobalbuffers=number
このパラメーターを使用して、使用されるグローバルバッファーの数を指定します。デフォルト値は、memorysize パラメーターで指定したサイズに基づいています。memorysize パラメーターを変更して、グローバルバッファーの数を変更できます。
old-object-queue-size=number-of-objects
このパラメーターを使用して、古いオブジェクトの最大数を追跡します。デフォルトでは、オブジェクト数は 256 に設定されます。
repository=path
このパラメーターを使用して、一時ディスクストレージのリポジトリーを指定します。デフォルトでは、システムの一時ディレクトリーを使用します。
retransform={true|false}
このパラメーターを使用して、JVMTI を使用してイベントクラスを再変換するかどうかを指定します。false に設定すると、読み込まれたイベントクラスにインストルメンテーションが追加されます。デフォルトでは、クラスの再変換を有効にするには、このパラメーターを true に設定します。
samplethreads={true|false}
このパラメーターを使用して、スレッドサンプリングを有効にするかどうかを指定します。スレッドサンプリングは、サンプリングイベントが有効で、このパラメーターが true に設定されている場合にのみ発生します。デフォルトでは、このパラメーターは true に設定されます。
stackdepth=depth
このパラメーターを使用して、スタックトレースのスタック深度を設定します。デフォルトでは、スタックの深さは 64 メソッド呼び出しに設定されます。スタックの最大深さを 2048 に設定できます。64 を超える値は、大きなオーバーヘッドを作成し、パフォーマンスが低下する可能性があります。
threadbuffersize=size
このパラメーターを使用して、スレッドのローカルバッファーサイズを指定します。デフォルトでは、ローカルバッファーサイズは最低 4 キロバイトの 8 キロバイトに設定されます。このパラメーターを上書きすると、パフォーマンスが低下する可能性があるため、推奨されません。
注記

複数のパラメーターの値をコンマで区切ります。