Java Flight Recorder によってランタイムの問題を診断する
システム要件
Java Flight Recorder を使用するには、Jira Server および Data Center 8.13 以降か、Bitbucket Server および Data Center 8.3 以降を実行していて、インスタンスが次の Java バージョン要件を満たしていることをご確認ください。
Oracle JRE、JDK
- Java 8
- Java 11
11 より前の Oracle Java バージョンでは、Java Flight Recorder は Java Platform, Standard Edition (Oracle Java SE Advanced and the Oracle Java SE Suite) に基づく商用パッケージでのみ利用できます。この機能を有効にするには、-XX:+UnlockCommercialFeatures
起動オプションを設定する必要があります。起動時にプロパティとオプションを設定する方法をご確認ください。
OpenJDK
- Java 1.8 (ビルド 8u282 以降)
- Java 11 (ビルド 11.0.5 以降)
サポート対象の製品バージョン
JFR のアプリ内診断をサポートするアトラシアン製品と機能に対応している製品バージョンを確認してください。
製品とサポート対象のバージョン | JFR が既定で有効 | JFR 記録が自動的に開始 | JFR がバンドル |
---|---|---|---|
Jira 8.13 以降 | 8.13 以降 | 9.0 以降 | 9.2 |
Bitbucket 8.3 以降 | 7.17 以降 | 8.3 以降 | N/A |
Confluence 7.4.0 以降 | 7.4.0 以降 | 7.20.0 | 7.20.0 |
継続的なデータ記録を有効にする
次の製品やリリースではデータ記録が自動的に開始されます。
- Jira Data Center および Server 9.0 以降
- Bitbucket Data Center および Server 8.3 以降
- Confluence Data Center および Server 7.20 以降
ただし、Jira のそれよりも前のリリース (8.13 以前) を実行している場合は、アプリ内診断を有効にして Java Flight Recorder でランタイム データを継続的に記録できるようにください。
継続的なランタイム データ記録を有効にするには、次の手順に従います。
- アプリ ヘッダーから [管理] > [システム] の順に選択します。
- 左側のメニューから [トラブルシューティングとサポート ツール] を選択します。
- [トラブルシューティングとサポート ツール] ページで [アプリ内診断] を有効にします。
既定のイベント収集設定
既定のイベント収集設定は、Oracle JDK に含まれる既定の Java Flight Recorder 設定に基づいています。Oracle JDK の一部として含まれている既定の設定のほとんどは変更されていませんが、いくつかの重要な違いがあります。具体的には、ガベージ コレクション イベントの収集が無効化されて、スレッド ダンプ イベントが 10 秒間隔で収集されるように変更されています。
既定のイベント収集設定は、<APP_HOME>/jfr
ディレクトリ内の default.jfc
テンプレート ファイルにリストされています。このテンプレートによって独自のカスタム設定を作成できます。
次の表に、テンプレート ファイルにあるイベント タイプ別の収集設定を示します。
オプション | 値 |
---|---|
ガベージ コレクター | オフ |
メモリ プロファイリング | オフ |
コンパイラー | 通常 |
メソッド サンプラー | 10 秒間隔 |
スレッド ダンプ | エラーのみ |
例外 | オブジェクト タイプ |
メモリ リーク検出 | 20ms |
同期しきい値 | 20ms |
ファイル I/O しきい値 | 20ms |
ソケット I/O しきい値 | 20ms |
既定のイベント収集設定を上書きする
既定のイベント収集設定を上書きする場合は、<APP_HOME>/jfr
にある default.jfc
テンプレート ファイルをベースにカスタム設定ファイルを作成できます。
既定のイベント収集設定を上書きするには、次の手順に従います。
- JDK Mission Control で、付属のテンプレートをベースにカスタム Java Flight Recorder 設定を作成して、
.jfc
拡張子を付けた一意の名前で保存します (たとえばcustom.jfc
)。 ファイルを
<APP_HOME>/jfr/
ディレクトリにコピーします。クラスター化 Data Center 設定では、ファイルを共有ホーム ディレクトリにコピーして、システムにあるすべてのノードからアクセスできるようにします。
<APP_HOME>/jfr/jfr.properties
ファイルを編集して、jfr.configuration.template.path
プロパティをコメント解除してその値をカスタム テンプレートのパスに変更します。- 変更内容を反映するには、アプリ インスタンスを再起動します。
既定のデータ記録プロパティ
しきい値、ターゲット ファイルのパス、保持するスナップショット ファイルの数などのデータ記録プロパティは、<APP_HOME>/jfr/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 とユーザー インターフェイスを使用してプロパティを上書きする
インスタンスを再起動して .jfc テンプレートを編集する代わりに、REST API エンドポイントまたはユーザー インターフェイスを使用して、最もよく使用されるプロパティを上書きできます。
新しいプロパティは、現在実行中の記録には適用されません。適用するには、現在の記録を停止してから新たに記録を開始してください。
プロパティの上書きの優先順位は次のとおりです (優先度の高い順)。
カスタム設定ファイル (.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 を使用してプロパティを上書きする
プロパティは、一括ではなく、1 つずつ上書きする必要があります。
次のエンドポイントを使用してプロパティ値を変更できます。PUT <domain>/jfr/properties/{propertyName}
この場合、リクエスト本文の中で特定の値を渡す必要があります。
ユーザー インターフェイスを使用してプロパティを上書きする
この説明は Jira Server および Data Center を対象としたものです。Confluence および Bitbucket では、設定メニューの名前が異なる場合があります。
UI を使用してプロパティを上書きするには、次の手順に従います。
- [システムサポート] 設定グループで、[トラブルシューティングとサポートツール] を選択します。
- [診断設定] に移動します。
[Java Flight Recorder 設定] に利用可能なプロパティが表示されます。値を希望値に設定します。
[適用] を選択します。
Java ランタイム環境に JFR との互換性がない場合、これらの設定は表示されません。
[適用] を選択してプロパティを更新すると、現在の JFR 記録は自動的に停止され、新しいプロパティ値で再開されます。
既定のデータ記録プロパティを上書きする
既定のデータ記録プロパティを上書きするには、次の手順に従います。
既存のファイルをコピーして新しい名前で保存することによって、カスタム
jfr.properties
ファイルを<APP_HOME>/jfr/
ディレクトリに作成します。クラスター化 Data Center 設定では、ファイルを共有ホーム ディレクトリにコピーして、システムにあるすべてのノードからアクセスできるようにします。
- 必要に応じて、すべてのプロパティまたは一部のプロパティのみを上書きしてカスタム ファイルを編集します。
-Djfr.config.location=/<APP_HOME>/jfr/<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 分間隔でバイナリ ファイルに自動で保存されます。必要に応じて、頻度を別の値に変更できます。
頻度を変更するには、<APP_HOME>/jfr/jfr.properties
ファイルをテキスト エディターまたは JDK Mission Control で開いて、jfr.default.recording.dump_cron_expression
プロパティを編集します。