分享方式:


適用於 Azure Monitor Application Insights 的 JAVA Profiler

注意

JAVA Profiler 功能從 3.4.0 版本開始推出,目前為預覽狀態。

Application Insights JAVA Profiler 提供下列系統:

  • 視需要從 JAVA 虛擬機器 (JVM) 產生 JDK Flight Recorder (JFR) 設定檔。
  • 從 JVM 符合特定觸發條件時自動產生 JFR 設定檔,例如 CPU 或記憶體違反已設定閾值。

概觀

Application Insights JAVA 分析工具會使用 JVM 提供的 JFR 分析工具來記錄分析資料,讓使用者稍後下載 JFR 錄製,並加以分析以找出效能問題的原因。

當符合觸發條件時,會視需要收集此資料。 可用的觸發程序是 CPU 使用量、記憶體耗用量和要求 (SLA 觸發程序) 的閾值。 要求觸發程序會監視 OpenTelemetry 所產生的範圍,並允許使用者設定這些範圍期間的服務等級協定 (SLA) 需求。

達到閾值時,會收集並上傳已設定類型和持續時間的設定檔。 然後,此設定檔會顯示在相關聯 Application Insights 入口網站 UI 的 [效能] 窗格中。

警告

根據預設,JFR 分析工具會執行「profile-without-env-data」設定檔。 JFR 檔案是由 JVM 發出的一系列事件。 「profile-without-env-data」 設定類似於與 JVM 隨附的「設定檔」組態,但已停用某些可能包含敏感性部署資訊的事件,例如環境變數、提供給 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 執行個體的所有代理程式中進行分析。 預設分析持續時間為兩分鐘。 您可以覆寫 periodicRecordingDurationSeconds 來變更它 (請參閱組態檔)。

警告

立即叫用分析會啟用分析工具功能,且 Application Insights 將會套用預設 CPU 和記憶體 SLA 觸發程序。 當您的應用程式違反這些 SLA 時,Application Insights 會收集 Java 設定檔。 如果您想要稍後停用分析功能,您可在安裝所示的觸發程序功能表中執行此動作。

CPU

CPU 閾值是系統上所有可用核心使用量的百分比。

例如,如果八個核心機器中的一個核心已飽和,CPU 百分比會視為 12.5%。

記憶體

記憶體百分比是目前老年代記憶體區域 (OldGen) 佔用量對區域之可能大小上限的比率。

執行老年代集合之後,會評估佔用量。 老年代區域的最大大小是 JAVA 虛擬機器 (JVM) 堆積成長到其最大大小時,它的大小。

例如下列案例:

  • JAVA 堆積最多可成長至 1024 MB。
  • 年老代可能會成長到堆積的 90%。
  • 因此,老年代的最大大小會是 922 MB。
  • 您的閾值是透過使用者介面設定為 75%,因此您的閾值會是 922 MB 的 75% (691 MB)。

在此案例中,下列情況會發生分析:

  • 執行完整記憶體回收
  • 在回收之後,年老代區域佔用超過 691 MB

Request

SLA 觸發程序是以 OpenTelemetry 為基礎,如果符合特定準則,則會起始設定檔。

每個個別觸發程序組態的格式如下:

  • Name - 觸發程序的唯一識別碼。
  • Filter - 篩選觸發程序感興趣的要求。
  • Aggregation - 計算違反指定閾值的要求比率。
    • Threshold - 確定會發生違反要求的最小值 (以毫秒為單位)。
    • Minimum samples - 彙總產生資料必須收集的最小樣本數,此設定是為了防止觸發小量樣本。
    • Window - 滾動時間範圍 (以毫秒為單位)。
  • Threshold - 套用至彙總輸出的閾值 (百分比)。 如果超過此值,則會起始分析。

例如,以下情節會觸發設定檔: 收集至少 100 個樣本時,在 60 秒的時間範圍內,超過 75% 對特定端點的要求 (/users/.*) 需要超過 30 毫秒的時間。

要求觸發程序範例的螢幕擷取畫面

安裝

下列步驟會引導您在代理程式上啟用分析元件,並設定資源限制,以在違反時觸發分析。

  1. 設定會導致回收設定檔的資源閾值:

    1. 瀏覽至 Application Insights 執行個體的 [效能] -> [分析工具] 區段。 用於開啟效能窗格的連結的螢幕擷取畫面。[效能] 窗格中的 [分析工具] 按鈕的螢幕擷取畫面。

    2. 選取「觸發程序」

    3. 設定必要的 CPU、記憶體或要求觸發程序 (若已啟用),然後選取 [套用]。 觸發程式設定的螢幕擷取畫面

警告

JAVA 分析工具不支援「取樣」觸發程序。 設定將不會受影響。

完成這些步驟之後,代理程式將會監視流程的資源使用量,並在超過閾值時觸發設定檔。 當設定檔已觸發並完成時,可從 [效能] -> [分析工具] 區段中的 Application Insights 執行個體檢視它。 您可以從該螢幕下載設定檔,一旦下載,JFR 錄製檔案即可在您選擇的工具 (例如 Oracle JDK Mission Control (JMC)) 內開啟和分析。

分析工具頁面功能和設定的螢幕擷取畫面。

組態

分析工具觸發設定的組態 (例如臨界值和分析期間) 能在 [效能]、[分析工具]、[觸發條件] UI 下的 [ApplicationInsights] UI 中設定,如安裝中所述。

此外,您可以使用環境變數和 applicationinsights.json 組態檔來設定許多參數。

設定中的設定檔內容

如果您想要提供自訂設定檔組態,請改變 memoryTriggeredSettings,並改變 cpuTriggeredSettings 以提供具有所需組態之 .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 監視器 Application Insights JAVA 分析?

Azure 監視器 Application Insights JAVA 分析工具會透過利用自訂組態來使用 JAVA Flight Recorder (JFR) 以分析您的應用程式。

什麼是 JAVA Flight Recorder (JFR)?

JAVA Flight Recorder (JFR) 是收集執行中 JAVA 應用程式分析資料的工具。 JFR 已整合到 JAVA 虛擬機器 (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 診斷使用。 您可以註冊以預覽這項功能。 您可以使用 JAVA Mission Control (JMC) 來檢視 JFR 錄製。

App Insights 中的隨選和自動 JAVA 分析有何差異?

隨選是使用者即時觸發的分析,而自動分析則是預先設定的觸發程序。

針對隨選分析選項使用 [立即分析]。 [立即分析] 會立即分析附加至 Application Insights 執行個體的所有代理程式。

自動化分析會在資源閾值中觸發缺口。

我可以設定哪一個 JAVA 分析觸發程序?

Application Insights JAVA 代理程式目前支援監視 CPU 和記憶體耗用量。 CPU 閾值會設定為機器上所有可用核心的百分比。 記憶體是目前年老代記憶體區域 (OldGen) 佔用量對區域的可能大小上限。

啟用 JAVA 程式碼分析所需的必要條件為何?

請檢閱本文頂端的必要條件

我是否可以針對微服務應用程式使用 JAVA 程式碼分析?

是,您可以使用 JFR 分析執行微服務的 JVM。