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 によって収集されたデータを効率的かつ正確に分析できるようにすることを目的としています。

サポートされている Data Center および Server 製品

Java Flight Recorder のアプリ内診断は、次の Atlassian Data Center および Server 製品で利用できます。

  • Jira Data Center および Server 8.13 以降

  • Bitbucket Data Center と Server 8.3 以降

  • Confluence Data Center および Server 7.4.0 以降

  • Bamboo Data Center 9.6.2 以降

Jira Data Center および Server

Java Flight Recorder は、Jira Server の次のリリースをサポートしています。

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

  • Jira Data Center と Server Java 9.0 または 9.1 では、Java Flight Recorder が既定でアクティブです。継続的なデータ記録は、Jira インスタンスを起動するとすぐに始まります。

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

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 Data Center および Server

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

Confluence Data Center および Server

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

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

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

Bamboo Data Center

Bamboo Data Center 9.6.2 以降は、Java Flight Recorder がソフトウェアにバンドルされています。継続的なデータ記録は、インスタンスを起動するとすぐに始まります。

On this page:

システム要件

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_sizejfr.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 がランタイム データを継続的に記録できるように、アプリ内診断を有効にしてください。

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

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

既定のイベント収集設定

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

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

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

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

  3. カスタム jfr.properties ファイルをまだ作成していない場合は作成します。

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

既定のデータ記録設定

しきい値、ターゲット ファイルのパス、保持するスナップショット ファイルの数などのデータ記録設定は、組み込みの 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、またはアプリのユーザー インターフェイスを使用してカスタム設定ファイルを作成することで上書きできます。

tip/resting Created with Sketch.

カスタム ファイルを編集するたびにインスタンスを再起動するのではなく、使用可能な REST API エンドポイントまたはユーザー インターフェイス (推奨) を通じて、最も頻繁に使用されるプロパティを上書きしてください。

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

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

  1. カスタム jfr.properties および *.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 を使用してプロパティを上書きする

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 では、設定やメニューの名前が異なる場合があります。

  1. 画面右上で [管理] > [システム] の順に選択します。
  2. [システム サポート] 設定グループで、[トラブルシューティングとサポート ツール] を選択します。
  3. [診断設定] を選択します。
  4. [Java Flight Recorder 設定] で、プロパティ値を任意の値に設定します。

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

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

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

カスタム設定ファイルを使用してデータ記録プロパティを上書きする

カスタム設定ファイルを使用して既定のデータ記録プロパティを上書きするには、次の手順に従います。

  1. アプリのローカル ホーム ディレクトリに空の jfr.properties ファイルを作成します。

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

  2. ニーズに応じて、すべてのプロパティまたは一部のプロパティのみを上書きしてカスタム ファイルを編集します。
    既定の設定に基づくファイル コンテンツの例を次に示します。

    # 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
  3. 必要に応じて、すべてのプロパティまたは一部のプロパティのみを上書きしてカスタム ファイルを編集します。

  4. -Djfr.config.location=/<APP_HOME>/<FILE_NAME>.properties を設定します。各項目の意味は次のとおりです。
    • <APP_HOME> は、アプリのローカル ホーム ディレクトリまたは共有ホーム ディレクトリのフル パスです。
    • <FILE_NAME> は、カスタム プロパティ ファイルの名前です。
  5. 変更内容を反映するには、アプリ インスタンスを再起動します。
    起動時にプロパティとオプションを設定する方法をご確認ください。

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 分間隔でバイナリ ファイルに自動で保存されます。必要に応じて、頻度を別の値に変更できます。

頻度を変更するには、テキスト エディターでカスタム jfr.properties ファイルの jfr.recording.dump_cron_expression プロパティを編集します。


最終更新日 2024 年 5 月 6 日

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

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