Java Flight Recorder によってランタイムの問題を診断する
システム要件
Java Flight Recorder を使用するには、サポートされている Data Center および Server 製品を実行していて、インスタンスが次の Java バージョン要件を満たしていることをご確認ください。
Oracle JRE & JDK
Java 11 (ビルド 11.0.5 以降)
OpenJDK
Java 1.8 (ビルド 8u282 以降)
Java 11 (ビルド 11.0.5 以降)
記録を開始する前に、ディスクに JFR ダンプを保存するための十分な空き容量があることをご確認ください。
記録に必要な容量は、次の式に従って計算されます: jfr.recording.max_size * jfr.recording.files_to_remain
記録に必要な容量を減らすには、必要に応じて jfr.recording.max_size
と jfr.recording.files_to_remain
のプロパティを編集します。プロパティの編集方法をご確認ください。
継続的なデータ記録を有効にする
データ記録は、次の Data Center アプリで自動的に開始されます。
Jira Data Center および Server 9.0 以降
Bitbucket Data Center と Server 8.3 以降
Confluence Data Center と Server 7.20 以降
- Bamboo Data Center 9.6.2 以降
これらの製品の以前のリリースを実行している場合は、Java Flight Recorder がランタイム データを継続的に記録できるように、アプリ内診断を有効にしてください。
継続的なランタイム データ記録を有効にするには、次の手順に従います。
- 画面右上で [管理] > [システム] の順に選択します。
- 左側のメニューから [トラブルシューティングとサポート ツール] を選択します。
- 「トラブルシューティングとサポート ツール」ページで、[アプリ内診断] を有効にします。
既定のイベント収集設定
既定のイベント収集設定は、Oracle JDK に含まれる既定の Java Flight Recorder 設定に基づいています。既定の設定のほとんどは変更されていませんが、ガベージ コレクション イベントの収集が無効化されて、スレッド ダンプ イベントが 10 秒間隔で収集されるように変更されています。
アクティブなイベント収集設定はすべて active_configuration.jfc
ファイルにリストされます。このファイルには、カスタム設定を適用しない場合の既定の設定が含まれているため、独自のカスタム設定を作成するためのテンプレートとして使用できます。
次の表に、テンプレート ファイルにあるイベント タイプ別の収集設定を示します。
オプション | 値 |
---|---|
ガベージ コレクター | オフ |
メモリ プロファイリング | オフ |
コンパイラー | 通常 |
メソッド サンプラー | 10 秒間隔 |
スレッド ダンプ | エラーのみ |
Exceptions | オブジェクト タイプ |
メモリ リーク検出 | 20ms |
同期しきい値 | 20ms |
ファイル I/O しきい値 | 20ms |
ソケット I/O しきい値 | 20ms |
既定のイベント収集設定を上書きする
既定のイベント収集設定を上書きする場合は、<APP_HOME>/log/jfr
にある active_configuration.jfc
テンプレート ファイルをベースにカスタム設定ファイルを作成できます。
既定のイベント収集設定を上書きするには、次の手順に従います。
- JDK Mission Control で、付属のテンプレートをベースにカスタム Java Flight Recorder 設定を作成して、
.jfc
拡張子を付けた一意の名前で保存します (たとえばcustom.jfc
)。 ファイルをアプリのローカル ホーム ディレクトリにコピーします。
クラスター化 Data Center 設定では、ファイルを共有ホーム ディレクトリにコピーして、システムにあるすべてのノードからアクセスできるようにします。
カスタム
jfr.properties
ファイルをまだ作成していない場合は作成します。jfr.properties
ファイルを編集して、jfr.configuration.template.path
プロパティをコメント解除してその値をカスタム テンプレートのパスに変更します。- 変更内容を反映するには、アプリ インスタンスを再起動します。
既定のデータ記録設定
しきい値、ターゲット ファイルのパス、保持するスナップショット ファイルの数などのデータ記録設定は、組み込みの jfr.properties
ファイルに定義されています。必要に応じて、一部またはすべての値を変更できます。
次の表に、データ記録プロセスを制御するプロパティと値を示します。
プロパティ | 値 | 説明 |
---|---|---|
jfr.recording.max_age | 600000 | スナップショット ファイルの最大経過時間しきい値 (ミリ秒単位)。この時間が経過すると、スナップショットが削除されます。 |
jfr.recording.max_size | 52428800 | スナップショットの最大サイズしきい値 (バイト単位)。このサイズを超えると、スナップショットが削除されます。 |
jfr.recording.files_to_remain | 1 | 保持するキャプチャ済みスナップショットの数。 |
jfr.recording.recordings_path | log/jfr | 記録が停止するか、スナップショットが作成されたときに、スナップショットが保存される場所。 |
jfr.recording.threaddumps_path | threaddumps | スレッド ダンプが抽出される場所。アプリのローカル ホーム パスを基準とした相対パスです。 |
jfr.recording.dump_cron_expression | 0 */5 * ? * * | スナップショットの作成頻度 (既定では 5 分間隔) を制御する CRON 式。 |
jfr.configuration.template.path | 初期設定ではコメント アウト | カスタム Java Flight Recorder イベント収集設定テンプレートの場所。 |
メモリのオーバーヘッドを減らすために、しきい値に達しても Java 仮想マシンによってすぐにすべてのスレッドが停止されるわけではありません。これは、保存されたデータが最大経過時間と最大サイズの各プロパティ設定値を超える可能性があることを意味します。システムのリソースに高い負荷がかかっている場合、記録されるデータの合計量はプロパティで定義されているしきい値よりもかなり大きくなる可能性があります。
既定のデータ記録プロパティを上書きする
既定のデータ記録プロパティは、REST API、またはアプリのユーザー インターフェイスを使用してカスタム設定ファイルを作成することで上書きできます。
カスタム ファイルを編集するたびにインスタンスを再起動するのではなく、使用可能な REST API エンドポイントまたはユーザー インターフェイス (推奨) を通じて、最も頻繁に使用されるプロパティを上書きしてください。
新しいプロパティ値は、実行中の記録には適用されません。新しい値を適用するには、現在の記録を停止してから新たに記録を開始してください。
プロパティの上書きの優先順位は次のとおりです (優先度の高い順)。
カスタム
jfr.properties
および*.jfc
ファイル (他の既定の設定はすべて無視される)REST API または UI ランタイムで変更された設定
組み込みの
jfr.properties
およびdefault.jfc
ファイルで定義された既定の設定
上書き可能なプロパティ
この表は、上書き可能なプロパティの最小値と最大値を示しています。
プロパティ名 | 説明と単位 | 最小値 | 最大値 |
---|---|---|---|
| データをディスク リポジトリに保存してから破棄するまでの期間 (ミリ秒) | 10 分 | 2日 |
| ディスク リポジトリに保存できるデータの最大サイズ (バイト数) | 10 MB | 2 GB |
jfr.thread.dump.interval | スレッド ダンプのキャプチャ間隔 (ミリ秒) | 1 秒 | 10 分 |
jfr.configuration.template.path | カスタム設定テンプレートのパス | N/A | N/A |
値はデータベースに保存されます。データベース テーブルは製品によって異なります。
製品 | データベース テーブル |
---|---|
Jira | propertyentry |
Confluence | bandana |
Bitbucket | plugin_setting |
REST API を使用してプロパティを上書きする
REST API を使用してプロパティ値を上書きするには、次のエンドポイントを呼び出して、リクエスト本文で特定の値を渡します。
PUT <domain>/jfr/properties/
複数のプロパティ値を一括で上書きしないでください。代わりに、各プロパティを個別に上書きしてください。
例:
curl --location --request PUT 'http://<host>:<port>/<product>/rest/troubleshooting/latest/jfr/properties/jfr.recording.max_size' \
--header 'Authorization: <Authorization>' \
--header 'Content-Type: text/plain' \
--header 'Cookie: <Cookie>' \
--data-raw '300'
ユーザー インターフェイスを使用してプロパティを上書きする
ユーザー インターフェイスを使用してプロパティ値を上書きするには、次の手順に従います。
この説明は Jira Data Center および Server を対象としたものです。Confluence および Bitbucket では、設定やメニューの名前が異なる場合があります。
- 画面右上で [管理] > [システム] の順に選択します。
- [システム サポート] 設定グループで、[トラブルシューティングとサポート ツール] を選択します。
- [診断設定] を選択します。
[Java Flight Recorder 設定] で、プロパティ値を任意の値に設定します。
[適用] を選択します。
Java ランタイム環境に JFR との互換性がない場合、これらの設定は表示されません。
[適用] を選択すると、現在の JFR 記録は停止し、新しいプロパティ値を適用して自動的に再開されます。
カスタム設定ファイルを使用してデータ記録プロパティを上書きする
カスタム設定ファイルを使用して既定のデータ記録プロパティを上書きするには、次の手順に従います。
アプリのローカル ホーム ディレクトリに空の
jfr.properties
ファイルを作成します。クラスター化 Data Center 設定では、ファイルを共有ホーム ディレクトリにコピーして、システムにあるすべてのノードからアクセスできるようにします。
ニーズに応じて、すべてのプロパティまたは一部のプロパティのみを上書きしてカスタム ファイルを編集します。
既定の設定に基づくファイル コンテンツの例を次に示します。# How long data is to be kept in the disk repository before it is thrown away (in millis) jfr.recording.max_age=600000 # The max size, measured in bytes, at which data will no longer be kept in the disk repository (in bytes) jfr.recording.max_size=52428800 # How many JFR historical files are kept on the disk jfr.recording.files_to_remain=1 # Path to store JFR recording files (relative to local app's home) jfr.recording.recordings_path=log/jfr # Path to store extracted thread dumps (relative to JFR path above) jfr.recording.threaddumps_path=threaddumps # Cron expression for periodical dump of JFR recording jfr.recording.dump_cron_expression=0 */5 * ? * * # Path to a custom JFR configuration template (relative to an app's shared home) #jfr.configuration.template.path=jfr/custom.jfc
必要に応じて、すべてのプロパティまたは一部のプロパティのみを上書きしてカスタム ファイルを編集します。
-Djfr.config.location=/<APP_HOME>/<FILE_NAME>.properties
を設定します。各項目の意味は次のとおりです。-
<APP_HOME>
は、アプリのローカル ホーム ディレクトリまたは共有ホーム ディレクトリのフル パスです。 -
<FILE_NAME>
は、カスタム プロパティ ファイルの名前です。
-
- 変更内容を反映するには、アプリ インスタンスを再起動します。
起動時にプロパティとオプションを設定する方法をご確認ください。
JFR 操作の監査
次の JFR 操作が監査されます。
カテゴリ: システム
カバレッジ レベル | ログに記録されるイベント |
---|---|
ベース |
|
操作はそれぞれ次の場合に実行されます。
アプリの起動時に JFR で記録が開始される。
JFR がオンになる。
JFR がオフになる。
スナップショット保持ポリシー
Jira Flight Recorder によって収集されたランタイム データのスナップショットが (スケジュールに従って、または管理者がサポート zip を作成したときに) 作成されると、以前に保存された記録がすべて削除されます。初期設定では、一度に 1 つのスナップショットしか保持されません。
ストレージに保持するスナップショットの数は、jfr.properties
ファイルの jfr.default.recording.files_to_remain
プロパティによって制御します。既定値を上書きする場合は、「既定のデータ記録プロパティを上書きする」を参照してください。
定期的なスナップショット ファイルには、次のスキームに従って名前が付けられます。
atst_in_product_diagnostic_yyyy_MM_dd_HH_mm_ss.jfr
Java 仮想マシンのシャットダウン時に作成されるスナップショットには、次のスキームに従って名前が付けられます。
atst_in_product_diagnostic_dump_on_exit_yyyy_MM_dd_HH_mm_ss.jfr
最新のスナップショットをダウンロードする
初期設定では、Java Flight Recorder バッファに収集されたランタイム イベントのスナップショットは、5 分間隔でバイナリ ファイルに自動で保存されます。最新のバイナリ ファイルはサポート zip アーカイブに追加されるため、それをアトラシアン サポートに送信してサポートを依頼できます。ファイルを取得するには、サポート zip を作成してダウンロードします。
サポート zip には最新のスナップショット ファイルのみが含まれています。このファイルは jfr-bundle
ディレクトリにあります。他のファイル (たとえば、終了時に作成されたスナップショットや古い定期ファイル) はディスク ストレージに残り、サポート zip には追加されません。
スナップショットをダウンロードするには、次の手順に従います。
- 画面右上で [管理] > [システム] の順に選択します。
- [システム] タブで [トラブルシューティングとサポート ツール] を選択します。
- [サポート zip を作成] タブを選択します。
- [ZIP を作成] を選択します。
- zip アーカイブがダウンロード可能になったら、[ZIP をダウンロード] を選択します。
- スナップショットを抽出して JDK Mission Control で開き、データを人間にとってわかりやすい形式で表示します。
スナップショットの作成頻度を変更する
初期設定では、Java Flight Recorder バッファに収集されたランタイム イベントのスナップショットは、5 分間隔でバイナリ ファイルに自動で保存されます。必要に応じて、頻度を別の値に変更できます。
頻度を変更するには、テキスト エディターでカスタム jfr.properties
ファイルの jfr.recording.dump_cron_expression
プロパティを編集します。