持續剖析可以有效發現Java程式中因為CPU、記憶體和IO導致的瓶頸問題,並且按照方法名稱、類名稱和行號進行細分統計,最終協助開發人員最佳化程式、降低延遲、增加吞吐、節約成本。本文介紹如何開通ARMS 持續剖析功能以及如何查看持續剖析資料。
持續剖析功能經效能測試,在一般的Spring Web應用所有功能效果全部開啟的情況下, CPU增加開銷5%左右,堆外增加記憶體開銷50 M左右,GC以及請求延遲增加不明顯。
前提條件
請先接入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。
使用限制
作業系統核心
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 |
|
Oracle JDK |
|
在控制台上開通持續剖析功能
登入ARMS控制台,在左側導覽列選擇 。
在應用列表頁面頂部選擇目標地區,然後單擊目標應用程式名稱。
說明語言列的表徵圖含義如下:
:接入應用監控的Java應用。
:接入應用監控的Golang應用。
-:接入Managed Service for OpenTelemetry的應用。
在左側導覽列中單擊應用設定,並在右側單擊自訂配置頁簽。
在自訂配置頁簽的持續剖析地區,開啟總開關,並設定IP白名單或IP範圍。
在自訂配置頁簽左下角單擊儲存。
查看持續剖析資料
登入ARMS控制台,在左側導覽列選擇 。
在應用列表頁面頂部選擇目標地區,然後單擊目標應用程式名稱。
說明語言列的表徵圖含義如下:
:接入應用監控的Java應用。
:接入應用監控的Golang應用。
-:接入Managed Service for OpenTelemetry的應用。
在左側導覽列中單擊持續剖析。
在左側執行個體列表中選擇目標執行個體,然後在右側版面設定資料展示時間。
在右側查詢頁簽,您可以執行以下操作篩選資料並查看彙總分析。
在時間視窗大小地區(圖示①)選擇快照時間大小,然後在曲線圖上通過滑鼠拖拽選擇快照時間範圍。
在圖示②的下拉框可以選擇資料類型:CPU情況、JVM Heap、JVM GC。
在圖示③地區顯示了快照時間範圍內的資料列表,單擊右上方的彙總分析可以查看快照詳情。
在右側對比頁簽,您可以分別兩組篩選資料,對不同時間段的資料進行對比分析。
使用代碼熱點功能
開啟持續剖析功能後,您還可以開啟代碼熱點功能,通過持續剖析技術定時採集請求線程堆棧快照,真實還原代碼執行的第一現場。具體操作,請參見使用代碼熱點診斷慢調用鏈的問題。