Java Flight Recorder によってランタイムの問題を診断する

Java アプリの問題を正確に診断してトラブルシューティングするには大量のログを確認して問題の厳密な状況と発生時間を特定する必要があり、作業が難航する可能性があります。手作業による調査に数え切れないほどの時間を費やす代わりに、Java Flight Recorder を使用できます。Java Flight Recorder に用意されている事後診断とトラブルシューティングの簡易機能によって、ランタイムの問題が発生した際にすぐに特定して解決できます。

Java Flight Recorder は循環バッファによって Java 仮想マシン ランタイムからイベントを継続的に収集して、収集したデータのスナップショットをバイナリ ファイルに定期的に記録します。

さらに、Java Flight Recorder によって収集されたデータをサポート zip アーカイブに含めて、アトラシアン サポートに送信してサポートを求められます。

Java Flight Recorder では、指定した間隔または次のタイミングでスナップショットを自動で作成できます。

  • 管理者が [トラブルシューティングとサポート ツール] 管理ページで [アプリ内診断] オプションを有効にしてサポート zip を作成する
  • 管理者が [トラブルシューティングとサポート ツール] 管理ページまたは適切な REST API 呼び出しによって [アプリ内診断] オプションを無効にする
  • Java 仮想マシンが正常にシャットダウンする

収集されたランタイム データは、JDK Mission Control で確認できます。これは Oracle から提供されている無料のツールで、Java Flight Recorder によって収集されたデータを効率的かつ正確に分析できるようにすることを目的としています。

現在、Java Flight Recorder のアプリ内診断が利用できるのは次のとおりです。

  • Jira Server および Data Center 8.13 以降
  • Bitbucket Server および Data Center 8.3 以降
  • Confluence Server および Data Center 7.4.0 以降

Jira Server および Data Center

Java Flight Recorder

  • Jira Server および Data Center 9.2 では、Java Flight Recorder はソフトウェアにバンドルされており、Jira インスタンスを起動するとすぐに継続的なデータ記録が始まります。

  • Jira Server および Data Center 9.0 と 9.1 では、Java Flight Recorder は既定で有効になっており、Jira インスタンスを起動するとすぐに継続的なデータ記録が始まります。

  • Jira Server および Data Center リリース 8.13 ~ 9.0 では、Java Flight Recorder はオプトイン機能です。利用するには、Atlassian Marketplace からトラブルシューティングとサポート ツール アプリをバージョン 1.39.0 にアップグレードしてください。

    Jira Server および Data Center 9.0 でトラブルシューティングとサポート ツールをバージョン 1.39.0 にアップグレードすると、自動的に記録が開始します。以前の Jira リリースでは、手動で記録を開始する必要がありました。

上記の情報の要約に関しては、次のテーブルをご参照ください。

Jira リリース利用可能な機能Jira にバンドル自動記録
8.12 以前(error)N/AN/A
8.13 ~ 8.22(tick) (オプト イン)(error)(error)
9.0(tick) (オプト イン)(error)(tick)
9.1 以降(tick)(tick)(tick)

Bitbucket Server および Data Center

Bitbucket Server および Data Centerr 8.3 以降では、Java Flight Recorder はソフトウェアにバンドルされており、インスタンスを起動するとすぐに継続的なデータ記録が始まります。

Confluence Server および Data Center

  • Confluence Server および Data Center 7.20 では、Java Flight Recorder はソフトウェアにバンドルされており、インスタンスを起動するとすぐに継続的なデータ記録が始まります。

  • Confluence Server および Data Center リリース 7.4.0 ~ 7.20 では、Java Flight Recorder はオプトイン機能です。利用するには、トラブルシューティングとサポート ツール アプリをバージョン 1.41.0 にアップグレードしてください。アップグレードは Atlassian Marketplace から行います。

    Confluence Server および Data Center 8.0 でトラブルシューティングとサポート ツールをバージョン 1.41.0 にアップグレードすると、自動的に記録が開始します。以前の Confluence リリースでは、手動で記録を開始する必要がありました。

On this page:

システム要件

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 でランタイム データを継続的に記録できるようにください。

継続的なランタイム データ記録を有効にするには、次の手順に従います。

  1. アプリ ヘッダーから [管理] > [システム] の順に選択します。
  2. 左側のメニューから [トラブルシューティングとサポート ツール] を選択します。
  3. [トラブルシューティングとサポート ツール] ページで [アプリ内診断] を有効にします。

既定のイベント収集設定

既定のイベント収集設定は、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 テンプレート ファイルをベースにカスタム設定ファイルを作成できます。

既定のイベント収集設定を上書きするには、次の手順に従います。

  1. JDK Mission Control で、付属のテンプレートをベースにカスタム Java Flight Recorder 設定を作成して、.jfc 拡張子を付けた一意の名前で保存します (たとえば custom.jfc)。
  2. ファイルを <APP_HOME>/jfr/ ディレクトリにコピーします。

    クラスター化 Data Center 設定では、ファイルを共有ホーム ディレクトリにコピーして、システムにあるすべてのノードからアクセスできるようにします。

  3. <APP_HOME>/jfr/jfr.properties ファイルを編集して、jfr.configuration.template.path プロパティをコメント解除してその値をカスタム テンプレートのパスに変更します。
  4. 変更内容を反映するには、アプリ インスタンスを再起動します。

既定のデータ記録プロパティ

しきい値、ターゲット ファイルのパス、保持するスナップショット ファイルの数などのデータ記録プロパティは、<APP_HOME>/jfr/jfr.properties ファイルに定義されています。必要に応じて、一部またはすべての値を変更できます。

次の表に、データ記録プロセスを制御するプロパティと値を示します。

プロパティ説明
jfr.recording.max_age600000スナップショット ファイルの最大経過時間しきい値 (ミリ秒単位)。この時間が経過すると、スナップショットが削除されます。
jfr.recording.max_size52428800スナップショットの最大サイズしきい値 (バイト単位)。このサイズを超えると、スナップショットが削除されます。
jfr.recording.files_to_remain1保持するキャプチャ済みスナップショットの数。
jfr.recording.recordings_pathlog/jfr記録が停止するか、スナップショットが作成されたときに、スナップショットが保存される場所。
jfr.recording.threaddumps_paththreaddumpsスレッド ダンプが抽出される場所。アプリのローカル ホーム パスを基準とした相対パスです。
jfr.recording.dump_cron_expression0 */5 * ? * *スナップショットの作成頻度 (既定では 5 分間隔) を制御する CRON 式。
jfr.configuration.template.path初期設定ではコメント アウトカスタム Java Flight Recorder イベント収集設定テンプレートの場所。

メモリのオーバーヘッドを減らすために、しきい値に達しても Java 仮想マシンによってすぐにすべてのスレッドが停止されるわけではありません。これは、保存されたデータが最大経過時間と最大サイズの各プロパティ設定値を超える可能性があることを意味します。システムのリソースに高い負荷がかかっている場合、記録されるデータの合計量はプロパティで定義されているしきい値よりもかなり大きくなる可能性があります。

REST API とユーザー インターフェイスを使用してプロパティを上書きする

インスタンスを再起動して .jfc テンプレートを編集する代わりに、REST API エンドポイントまたはユーザー インターフェイスを使用して、最もよく使用されるプロパティを上書きできます。

新しいプロパティは、現在実行中の記録には適用されません。適用するには、現在の記録を停止してから新たに記録を開始してください。

プロパティの上書きの優先順位は次のとおりです (優先度の高い順)。

  1. カスタム設定ファイル (.jfc) (他の既定の設定はすべて無視される)

  2. REST API または UI ランタイムで変更された設定

  3. 埋め込み jfr.properties および default.jfc ファイルで定義された既定の設定

上書き可能なプロパティと方法

この表は、上書き可能なプロパティの最小値と最大値を示しています。

プロパティ名

説明と単位

最小値

最大値

jfr.recording.max.age

データをディスク リポジトリに保存してから破棄するまでの期間 (ミリ秒)

10 分

2日

jfr.recording.max.size

ディスク リポジトリに保存できるデータの最大サイズ (バイト数)

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}
この場合、リクエスト本文の中で特定の値を渡す必要があります。

例を参照
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 Server および Data Center を対象としたものです。Confluence および Bitbucket では、設定メニューの名前が異なる場合があります。

UI を使用してプロパティを上書きするには、次の手順に従います。

  1. Error rendering macro 'excerpt-include'

    ユーザー 'null' にはこのページを表示する権限がありません。

  2. [システムサポート] 設定グループで、[トラブルシューティングとサポートツール] を選択します。
  3. [診断設定] に移動します。
  4. [Java Flight Recorder 設定] に利用可能なプロパティが表示されます。値を希望値に設定します。

  5. [適用] を選択します。

Java ランタイム環境に JFR との互換性がない場合、これらの設定は表示されません。

[適用] を選択してプロパティを更新すると、現在の JFR 記録は自動的に停止され、新しいプロパティ値で再開されます。

既定のデータ記録プロパティを上書きする

既定のデータ記録プロパティを上書きするには、次の手順に従います。

  1. 既存のファイルをコピーして新しい名前で保存することによって、カスタム jfr.properties ファイルを <APP_HOME>/jfr/ ディレクトリに作成します。

    クラスター化 Data Center 設定では、ファイルを共有ホーム ディレクトリにコピーして、システムにあるすべてのノードからアクセスできるようにします。

  2. 必要に応じて、すべてのプロパティまたは一部のプロパティのみを上書きしてカスタム ファイルを編集します。
  3. -Djfr.config.location=/<APP_HOME>/jfr/<FILE_NAME>.properties を設定します。ここで、<APP_HOME> はアプリのローカルまたは共有ホーム ディレクトリのフル パスであり、<FILE_NAME> はカスタム プロパティ ファイルの名前です。
  4. 変更内容を反映するには、アプリ インスタンスを再起動します。起動時にプロパティとオプションを設定する方法をご確認ください。

JFR 操作の監査

次の JFR 操作が監査されます。

カテゴリ: システム

カバレッジ レベル

ログに記録されるイベント

ベース

  • 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 には追加されません。

スナップショットをダウンロードするには、次の手順に従います。

  1. アプリ ヘッダーから [管理] > [システム] の順に選択します。
  2. [システム] タブで [トラブルシューティングとサポート ツール] を選択します。
  3. [サポート zip を作成] タブを選択します。
  4. [zip を作成] を選択します。
  5. zip アーカイブがダウンロード可能になったら [zip をダウンロード] を選択します。
  6. スナップショットを抽出して JDK Mission Control で開き、データを人間にとってわかりやすい形式で表示します。

スナップショットの作成頻度を変更する

初期設定では、Java Flight Recorder バッファに収集されたランタイム イベントのスナップショットは、5 分間隔でバイナリ ファイルに自動で保存されます。必要に応じて、頻度を別の値に変更できます。

頻度を変更するには、<APP_HOME>/jfr/jfr.properties ファイルをテキスト エディターまたは JDK Mission Control で開いて、jfr.default.recording.dump_cron_expression プロパティを編集します。


最終更新日 2022 年 9 月 13 日

この内容はお役に立ちましたか?

はい
いいえ
この記事についてのフィードバックを送信する
Powered by Confluence and Scroll Viewport.