全部產品
Search
文件中心

Application Real-Time Monitoring Service:接入持續剖析功能

更新時間:Nov 26, 2024

持續剖析可以有效發現Java程式中因為CPU、記憶體和IO導致的瓶頸問題,並且按照方法名稱、類名稱和行號進行細分統計,最終協助開發人員最佳化程式、降低延遲、增加吞吐、節約成本。本文介紹如何開通ARMS 持續剖析功能以及如何查看持續剖析資料。

持續剖析功能經效能測試,在一般的Spring Web應用所有功能效果全部開啟的情況下, CPU增加開銷5%左右,堆外增加記憶體開銷50 M左右,GC以及請求延遲增加不明顯。

前提條件

重要
  • 僅專家版和按寫入可觀測資料量計費模式支援持續剖析功能,開通專家版的操作,請參見隨用隨付。切換到按寫入可觀測資料量計費模式的操作,請參見計費變更

  • 金融雲和政務雲部分地區暫不支援持續剖析功能,如需體驗此功能,請聯絡使用者群(群號:22560019672)協助開通。

  • 持續剖析資料僅支援儲存7天。

  • 請先接入ARMS應用監控,並且將Agent版本更新至v2.7.3.5或以上版本。接入應用監控的操作,請參見應用監控接入概述;升級探針的操作,請參見升級ARMS探針

  • 如果應用所部署環境的VPC網路設定了可訪問阿里雲Object Storage Service的Bucket限制策略,由於該功能會將應用執行個體所採集資料上傳到ARMS統一的OSS Bucket中進行儲存與處理,如果配置相關策略但未將ARMS統一的OSS Bucket配置在其中會導致資料無法被有效採集。需要將持續剖析功能相關的Bucket(arms-profiling-<regionId>)配置在您的策略規則中。請將<regionId>換成對應的地區ID,例如您應用部署在cn-hangzhou地區,Bucket則對應為arms-profiling-cn-hangzhou。

  • 持續剖析功能當前僅支援OpenJDK和Oracle JDK,不支援IBM OpenJ9和Oracle GraalVM JDK。

使用限制

作業系統核心

Linux 2.6.32-431.23.3.el6.x86_64及以上。

說明

通過uname -r命令可以查詢當前核心版本。

JDK版本

ARMS的持續剖析功能使用Java虛擬機器工具介面(Java Virtual Machine Tool Interface,簡稱JVM TI)擷取應用的方法棧,從而獲得應用運行期間的CPU以及記憶體使用量詳情。JVM TI存在已知的Crash問題,可能導致應用崩潰,這個問題在OpenJDK 8u352/11.0.17/17.0.5,Oracle JDK 11.0.21/17.0.9版本中已經得到了修複。對於問題修複之前的JDK版本,ARMS團隊進行了多次測試,發現問題的觸發依賴特殊的情境,發生機率極低。因此,在JDK版本不能滿足要求的情況下,ARMS不會強制關閉持續剖析能力,您可以根據需要,臨時開啟持續剖析功能,並通過應用IP限制生效範圍。但為了應用運行穩定,我們強烈建議您按照要求升級JDK版本,在低版本的JDK上使用持續剖析功能,存在應用崩潰的風險。

持續剖析功能主要依賴於JDK中存在偵錯符號(debug symbols),Alpine基礎鏡像為了控制體積而去除了JDK偵錯符號導致功能使用受影響,如需使用相關功能建議優先考慮使用非Alpine基礎鏡像。

持續剖析建議JDK版本:

JDK類型

版本

OpenJDK

  • OpenJDK 8u352+

  • OpenJDK 11.0.17+

  • OpenJDK 17.0.5+

Oracle JDK

  • Oracle JDK 11.0.21+

  • Oracle JDK 17.0.9+

在控制台上開通持續剖析功能

  1. 登入ARMS控制台,在左側導覽列選擇應用監控 > 應用列表

  2. 應用列表頁面頂部選擇目標地區,然後單擊目標應用程式名稱。

    說明

    語言列的表徵圖含義如下:

    Java表徵圖:接入應用監控的Java應用。

    image:接入應用監控的Golang應用。

    image:接入應用監控的Python應用。

    -:接入Managed Service for OpenTelemetry的應用。

  3. 在左側導覽列中單擊應用設定,並在右側單擊自訂配置頁簽。

  4. 自訂配置頁簽的持續剖析地區,開啟總開關,並設定IP白名單IP範圍

  5. 自訂配置頁簽左下角單擊儲存

查看持續剖析資料

  1. 登入ARMS控制台,在左側導覽列選擇應用監控 > 應用列表

  2. 應用列表頁面頂部選擇目標地區,然後單擊目標應用程式名稱。

    說明

    語言列的表徵圖含義如下:

    Java表徵圖:接入應用監控的Java應用。

    image:接入應用監控的Golang應用。

    image:接入應用監控的Python應用。

    -:接入Managed Service for OpenTelemetry的應用。

  3. 在左側導覽列中單擊持續剖析

  4. 在左側執行個體列表中選擇目標執行個體,然後在右側版面設定資料展示時間。

  5. 在右側查詢頁簽,您可以執行以下操作篩選資料並查看彙總分析。

    資料展示

    1. 時間視窗大小地區(圖示①)選擇快照時間大小,然後在曲線圖上通過滑鼠拖拽選擇快照時間範圍。

    2. 在圖示②的下拉框可以選擇資料類型:CPU情況、JVM Heap、JVM GC。

    3. 在圖示③地區顯示了快照時間範圍內的資料列表,單擊右上方的彙總分析可以查看快照詳情。

      圖 1. 效能分析效能分析

      • Self列表示方法在自身的調用棧中所消耗的時間或資源,不包括其子方法調用所消耗的時間或資源。可以用於識別哪些方法在自身內部花費了大量的時間或資源。

      • Total列包含方法自身消耗的時間或資源,及其所有子方法調用所消耗的時間或資源。可以協助瞭解整個方法調用棧中哪些方法貢獻了最多的時間或資源。

      如需排查具體的熱點代碼邏輯,可以通過重點關注Self列或直接查看右側火焰圖中底部的較寬火苗從中定位到高耗時的業務方法,較寬火苗是引發上層耗時高的根源,一般是系統效能的瓶頸所在,您可以重點關注。

      圖 2. 指標列表指標列表

      圖 3. 快照列表快照列表

  6. 在右側對比頁簽,您可以分別兩組篩選資料,對不同時間段的資料進行對比分析。

使用代碼熱點功能

開啟持續剖析功能後,您還可以開啟代碼熱點功能,通過持續剖析技術定時採集請求線程堆棧快照,真實還原代碼執行的第一現場。具體操作,請參見使用代碼熱點診斷慢調用鏈的問題