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

Currently, the Java Flight Recorder in-app diagnostics are available only in Jira Server and Data Center 8.13 or newer:

  • In Jira Data Center and Server 9.1, the Java Flight Recorder is bundled with the software and continuous data recording begins as soon as you start up your Jira instance.

  • In Jira Data Center and Server releases 8.13 through 9.0, the Java Flight Recorder is an opt-in feature. To use it, upgrade the Troubleshooting and Support Tools app to version 1.39.0 from the Atlassian Marketplace.

    In Jira Data Center and Server 9.0, the recording begins automatically once you upgrade Troubleshooting and Support Tools to version 1.39.0. In earlier Jira releases, you have to start the recording manually.

Take a look at the following table for a summary of the information above:

Jira release利用可能な機能Bundled with JiraAutomatic recording
8.12 and older(error)N/AN/A
8.13–8.22(tick) (opt-in)(error)(error)
9.0(tick) (opt-in)(error)(tick)
9.1 and newer(tick)(tick)(tick)

このページの内容

システム要件

To use the Java Flight Recorder, make sure that you are running Jira Server or Data Center 8.13 or newer and that your instance meets the following Java version requirements:

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 (build 8u282 or newer)
  • Java 11 (build 11.0.5 or newer)

継続的なデータ記録を有効にする

In Jira Data Center and Server 9.0 and newer, the data recording is started automatically for you. However, if you're running an earlier release of Jira (at least 8.13), make sure to enable in-app diagnostics to allow the Java Flight Recorder to record runtime data continuously.

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

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

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

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

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

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

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

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

スナップショット保持ポリシー

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 年 8 月 2 日

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

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