適用於 Azure 監視器 Application Insights 的 Java Profiler

注意

從 3.4.0 開始,Java Profiler 功能處於預覽狀態。

Application Insights Java Profiler 提供下列系統:

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

概觀

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

符合觸發條件時,會視需要收集此數據。 可用的觸發程式是CPU使用量、記憶體耗用量和要求 (服務等級協定觸發程式) 的臨界值。 要求觸發程式會監視 OpenTelemetry 所產生的 Spans,並允許使用者在這些 Spans 期間設定服務等級協定 (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 堆積最多可成長為 1,024 MB。
  • 終身代可以成長到堆積的90%。
  • 最長的任期大小為922 mb。
  • 您的閾值已透過使用者介面設定為 75%,因此您的閾值會是 922 mb、691 mb 的 75%。

在此案例中,設定檔會在下列情況下發生:

  • 執行完整垃圾收集
  • 收集后的使用期區域佔用超過 691 mb

要求

SLA 觸發程式是以 OpenTelemetry 為基礎,並在符合特定準則時起始配置檔。

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

  • Name - 觸發程式的唯一標識符。
  • Filter - 篩選觸發程式感興趣的要求。
  • Aggregation - 計算違反指定臨界值的要求比率。
    • Threshold - 決定發生要求缺口的最小值(以毫秒為單位)。
    • Minimum samples - 必須收集的樣本數目下限,匯總才能產生數據,此設定是防止觸發小型樣本大小。
    • Window - 滾動時間範圍(以毫秒為單位)。
  • Threshold - 套用至匯總輸出的臨界值(百分比)。 如果超過此值,則會起始配置檔。

例如,如果下列案例會在收集至少 100 個樣本時,在 60 秒的視窗中,超過 75% 對特定端點的要求 (/users/.*) 需要超過 30 毫秒的時間,就會觸發配置檔。

Screenshot of request trigger sample

安裝

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

  1. 設定造成收集設定檔的資源閾值:

    1. 流覽至 Application Insights 實例的 Performance -> 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 分析工具不支援「取樣」觸發程式。 設定這項設定不會有任何作用。

完成這些步驟之後,代理程式會監視進程的資源使用量,並在超過閾值時觸發配置檔。 當配置檔觸發並完成時,可以從 Performance -> Profiler 區段內的 Application Insights 實例檢視它。 您可以從該畫面下載配置檔,一旦下載 JFR 錄製檔案,即可在您選擇的工具內開啟和分析,例如 Oracle JDK 任務控制件 (JMC)。

Screenshot of profiler page features and settings.

組態

分析工具觸發設定的設定,例如臨界值和分析期間,是在 Performance、Profiler、Triggers UI 底下的 ApplicationInsights UI 中設定,如安裝中所述

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

設定設定檔內容

如果您想要提供自訂配置檔組態,請 memoryTriggeredSettings改變 ,並提供 cpuTriggeredSettings 具有所需組態之 .jfc 檔案的路徑。

您可以在功能表下的 Window->Flight Recording Template Manager JDK 任務控制件 (JMC) 使用者介面中產生/編輯設定檔,並在此使用者介面內 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. profile.jfc使用隨附於 JFR 的組態。
  • 檔案系統上自訂 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?

Java Flight Recorder (JFR) 是收集執行中 Java 應用程式分析數據的工具。 JFR 已整合至 Java 虛擬機 (JVM),並用於針對效能問題進行疑難解答。 深入瞭解 Java SE JFR 運行時間

啟用 App Insights Java 程式代碼剖析的價格和/或授權費用有何影響?

Java 程式代碼剖析是 Application Insights 的免費功能。 Azure 監視器 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 微服務。