Java Profiler for Azure Monitor Application Insights

注意

3.4.0 以降、Java Profiler 機能はプレビュー段階です。

Application Insights Java Profiler には、次のようなシステムが用意されています。

  • Java 仮想マシン (JVM) からオンデマンドで JDK Flight Recorder (JFR) プロファイルを生成する。
  • 構成したしきい値を CPU またはメモリが超えるなど、JVM の特定のトリガー条件が満たされた場合に、JFR プロファイルを自動的に生成する。

概要

Application Insights Java Profiler は、JVM が提供する JFR プロファイラーを使ってプロファイル データを記録します。ユーザーはこれを利用し、後で JFR の記録をダウンロードして分析し、パフォーマンスの問題の原因を特定することができます。

このデータは、トリガー条件が満たされたときにオンデマンドで収集されます。 使用可能なトリガーは、CPU 使用率、メモリ消費量、要求 (サービス レベル アグリーメント トリガー) に対するしきい値です。 要求トリガーは、OpenTelemetry によって生成されたスパンを監視し、ユーザーがそれらのスパンの期間中にサービス レベル アグリーメント (SLA) 要件を構成できるようにします。

しきい値に達すると、構成した種類と期間のプロファイルが収集され、アップロードされます。 このプロファイルは、関連付けられた Application Insights ポータル UI のパフォーマンス ウィンドウ内に表示されます。

警告

JFR プロファイラーの既定では "profile-without-env-data" プロファイルが実行されます。 JFR ファイルは、JVM によって生成される一連のイベントです。 "profile-without-env-data" の構成は、JVM に含まれている "profile" の構成と似ていますが、環境変数、JVM に提供される引数、システム上で実行中のプロセスなど、機密性の高いデプロイ情報を含む可能性がある一部のイベントは無効になっています。

使用できなくなったフラグは次のとおりです。

  • jdk.JVMInformation
  • jdk.InitialSystemProperty
  • jdk.OSInformation
  • jdk.InitialEnvironmentVariable
  • jdk.SystemProcess

ただし、有効にしたフラグをすべて見直して、プロファイルに機密データが含まれていないことを確認する必要があります。

カスタム プロファイラーの構成設定については、「プロファイル コンテンツの構成」を参照してください。

前提条件

  • Java Flight Recorder (JFR) 機能を使用する JVM
    • Java 8 更新プログラム 262 以降
    • Java 11 以降

警告

OpenJ9 JVM はサポートされていません

使用法

トリガー

使用できるさまざまなトリガーの詳細については、プロファイラー概要に関する記事を参照してください。

ApplicationInsights Java エージェントは、CPU、メモリ、要求期間 (ビジネス トランザクションなど) を監視します。 構成されたしきい値に違反すると、プロファイルがトリガーされます。

今すぐプロファイル

[今すぐプロファイル] ボタンは、プロファイラー ユーザー インターフェイスにあります (プロファイラー設定に関する記事を参照)。 このボタンを選ぶと、Application Insights インスタンスにアタッチされているすべてのエージェントのプロファイルがすぐに要求されます。 既定のプロファイル期間は 2 分です。 periodicRecordingDurationSeconds をオーバーライドするとこれを変更できます (「構成ファイル」を参照)。

警告

プロファイルを呼び出すとプロファイラー機能が有効になり、Application Insights によって既定の CPU とメモリの SLA トリガーが適用されます。 アプリケーションがこれらの SLA に違反すると、Application Insights によって Java プロファイルが収集されます。 後でプロファイリングを無効にする場合は、「インストール」に示されているトリガー メニュー内で無効にできます。

CPU

CPU しきい値は、システム上のすべての使用できるコアの使用率です。

たとえば、8 コアのマシンの 1 つのコアが飽和した場合、CPU の割合は 12.5% と見なされます。

メモリ

メモリの割合は、リージョンの最大可能サイズに対する Tenured メモリ リージョン (OldGen) の現在の占有率です。

占有率は、Tenured コレクションが実行された後に評価されます。 Tenured リージョンの最大サイズは、Java Virtual Machine (JVM) のヒープがその最大サイズに増大した場合のサイズです。

たとえば、次のようなシナリオを考えてみましょう。

  • Java ヒープは最大 1,024 MB まで増大する可能性があります。
  • Tenured Generation はヒープの 90% まで増大する可能性があります。
  • Tenured の最大可能サイズは 922 MB です。
  • ユーザー インターフェイスでしきい値を 75% に設定したため、しきい値は 922 MB の 75% である 691 MB になります。

このシナリオでは、次のような状況でプロファイルが発生します。

  • フル ガベージ コレクションが実行された
  • 収集後、Tenured リージョンの占有率が 691 MB を超えた

要求

SLA トリガーは OpenTelemetry に基づいており、特定の条件が満たされた場合にプロファイルを開始します。

個々のトリガー構成は、次のような形式になります。

  • Name - トリガーの一意識別子
  • Filter - トリガーの対象となる要求をフィルター処理します。
  • Aggregation - 特定のしきい値に違反した要求の比率が計算されます。
    • Threshold - 要求違反が発生したと判別される最小値 (ミリ秒単位)。
    • Minimum samples - データを生成するために集計で収集する必要があるサンプルの最小数。この設定は、小さなサンプル サイズでトリガーされないようにするためのものです。
    • Window - ローリング時間枠 (ミリ秒単位)。
  • Threshold - 集計出力に適用されるしきい値 (パーセンテージ)。 この値を超えると、プロファイルが開始されます。

たとえば、次のシナリオでは、60 秒の時間枠で、少なくとも 100 個のサンプルが収集されたときに、特定のエンドポイント (/users/.*) に対する要求の 75% 以上が 30 ミリ秒を超える場合、プロファイルをトリガーします。

Screenshot of request trigger sample

インストール

次の手順では、エージェントでプロファイル コンポーネントを有効にし、違反した場合にプロファイルをトリガーするリソース制限を構成する方法について説明します。

  1. プロファイルの収集を開始するリソースのしきい値を構成します。

    1. Application Insights インスタンスの [パフォーマンス] -> [Profiler] セクションを参照してください。 Screenshot of the link to open performance pane.Screenshot of the Profiler button from the Performance pane.

    2. [トリガー] を選びます

    3. 必要な CPU、メモリ、または要求トリガー (有効な場合) を構成し、[適用] を選択します。 Screenshot of trigger settings

警告

Java Profiler は "サンプリング" トリガーをサポートしていません。 これを構成しても効果はありません。

これらの手順を完了すると、エージェントによってプロセスのリソース使用量が監視され、しきい値を超えるとプロファイルがトリガーされるようになります。 プロファイルがトリガーされ、完了すると、Application Insights インスタンスの [パフォーマンス] -> [Profiler] セクションから確認できます。 この画面からプロファイルをダウンロードできます。ダウンロード後は JFR 記録ファイルを開いて、Oracle JDK Mission Control (JMC) などの任意のツールで分析できます。

Screenshot of profiler page features and settings.

構成

しきい値とプロファイル期間などの Profiler トリガー設定の構成は、インストールに関する記事で説明されているように、ApplicationInsights UI の [パフォーマンス]、[Profiler]、[トリガー] の UI で設定します。

さらに、多くのパラメーターは、環境変数と applicationinsights.json 構成ファイルを使って構成できます。

プロファイル コンテンツの構成

カスタム プロファイルの構成を指定する場合は、memoryTriggeredSettingscpuTriggeredSettings を変更して、必要な構成を含む .jfc ファイルへのパスを指定します。

プロファイルは、JDK Mission Control (JMC) ユーザー インターフェイスの Window->Flight Recording Template Manager メニューで生成または編集できます。個々のフラグのコントロールはこのユーザー インターフェイスの Edit->Advanced 内にあります。

環境変数

  • APPLICATIONINSIGHTS_PREVIEW_PROFILER_ENABLED: プロファイル機能を有効または無効にするブール値 (既定値: true)。 既定では、この機能はエージェント内で有効になっています (エージェント 3.4.9 以降)。 ただし、エージェント内でこの機能が有効になっている場合でも、「インストール」の説明に従ってポータル内で有効にしない限り、プロファイルは収集されません。

構成ファイル

構成の例

{
  "preview": {
    "profiler": {
      "enabled": true,
      "cpuTriggeredSettings": "profile-without-env-data",
      "memoryTriggeredSettings": "profile-without-env-data",
      "manualTriggeredSettings": "profile-without-env-data",
      "enableRequestTriggering": true,
      "periodicRecordingDurationSeconds": 60
    }
  }
}

memoryTriggeredSettings メモリ プロファイルが要求された場合に、この構成が使われます。 この値は次のいずれかです。

  • profile-without-env-data (既定値)。 特定の機密イベントを無効にしたプロファイル。詳細については「警告」セクションを参照してください。
  • profile JFR に含まれている profile.jfc 構成を使います。
  • ファイル システム上のカスタム jfc 構成ファイルのパス (たとえば、/tmp/myconfig.jfc)。

cpuTriggeredSettings CPU プロファイルが要求された場合に、この構成が使われます。 この値は次のいずれかです。

  • profile-without-env-data (既定値)。 特定の機密イベントを無効にしたプロファイル。詳細については「警告」セクションを参照してください。
  • profile JFR に含まれている profile.jfc jfc 構成を使います。
  • ファイル システム上のカスタム jfc 構成ファイルのパス (たとえば、/tmp/myconfig.jfc)。

manualTriggeredSettings 手動プロファイルが要求された場合に、この構成が使われます。 この値は次のいずれかです。

  • profile-without-env-data (既定値)。 特定の機密イベントを無効にしたプロファイル。詳細については「警告」セクションを参照してください。
  • profile JFR に含まれている profile.jfc jfc 構成を使います。
  • ファイル システム上のカスタム jfc 構成ファイルのパス (たとえば、/tmp/myconfig.jfc)。

enableRequestTriggering 要求構成に基づいて JFR プロファイルをトリガーする必要があるかどうか。 この値は次のいずれかです。

  • true 要求トリガーのしきい値に違反すると、プロファイルがトリガーされます。
  • false (既定値)。 要求の構成では、プロファイリングはトリガーされません。

periodicRecordingDurationSeconds プロファイリング セッションが [今すぐプロファイル] ボタンを使用して開始されたときのプロファイリング記録時間 (秒単位)。 既定値は 120 です。

よく寄せられる質問

Azure Monitor Application Insights の Java プロファイルとは何ですか?

Azure Monitor Application Insights Java Profiler では、Java Flight Recorder (JFR) を使い、カスタマイズされた構成を使ってアプリケーションをプロファイルします。

Java Flight Recorder とは何ですか?

Java Flight Recorder (JFR) は、実行中の Java アプリケーションのプロファイル データを収集するためのツールです。 JFR は、Java Virtual Machine (JVM) に統合されており、パフォーマンスの問題のトラブルシューティングに使われます。 Java SE JFR ランタイムの詳細を参照してください。

App Insights の Java プロファイルを有効にする場合、価格やライセンス料金はどうなりますか?

Java プロファイルは Application Insights の無料機能です。 Azure Monitor Application Insights の価格は、インジェストのコストに基づいています。

どの Java プロファイル情報が収集されますか?

JFR によって収集されるプロファイル データには、メソッドと実行のプロファイル データ、ガベージ コレクション データ、ロック プロファイルが含まれます。

App Insights の Java プロファイルを使ってデータを視覚化するにはどうすればよいですか?

JFR の記録は、Java Mission Control (JMC) など、任意のツールで表示および分析できます。

App Insights Java プロファイルに関するパフォーマンス診断と修正の推奨事項は提供されますか?

'パフォーマンス診断と推奨事項' は、Application Insights Java 診断としてまもなく提供される新機能です。 サインアップすると、この機能をプレビューできます。 JFR の記録は、Java Mission Control (JMC) で確認できます。

App Insights のオンデマンドと自動の Java プロファイルの違いは何ですか?

オンデマンドはユーザーがリアルタイムでプロファイルをトリガーするのに対し、自動プロファイルは事前に構成されたトリガーで行われます。

オンデマンド プロファイル オプションには、[今すぐプロファイル] を使います。 [今すぐプロファイル] を選ぶと、Application Insights インスタンスにアタッチされたすべてのエージェントが直ちにプロファイルされます。

自動プロファイルは、リソースのしきい値に違反した場合にトリガーされます。

どの Java プロファイル トリガーを構成できますか?

現在、Application Insights Java Agent は CPU とメモリの消費量の監視をサポートしています。 CPU のしきい値は、マシン上で使用できるすべてのコアの割合として構成されます。 メモリは、リージョンの最大可能サイズに対する Tenured メモリ リージョン (OldGen) の現在の占有率です。

Java プロファイルを有効にするために必要な前提条件は何ですか?

この記事の冒頭にある「前提条件」を参照してください。

マイクロサービス アプリケーションに Java プロファイルを使用できますか?

はい、JFR を使ってマイクロサービスを実行している JVM をプロファイルできます。