持續剖析可以有效發現Java程序中因為CPU、內存和IO導致的瓶頸問題,并且按照方法名稱、類名稱和行號進行細分統計,最終協助開發者優化程序、降低延遲、增加吞吐、節約成本。本文介紹如何開通ARMS 持續剖析功能以及如何查看持續剖析數據。
持續剖析功能經性能測試,在一般的Spring Web應用所有功能效果全部開啟的情況下, CPU增加開銷5%左右,堆外增加內存開銷50 M左右,GC以及請求延遲增加不明顯。
前提條件
請先接入ARMS應用監控,并且將Agent版本更新至v2.7.3.5或以上版本。接入應用監控的操作,請參見應用監控接入概述;升級探針的操作,請參見升級ARMS探針。
如果應用所部署環境的VPC網絡配置了可訪問阿里云對象存儲OSS的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 |
|
Oracle JDK |
|
在控制臺上開通持續剖析功能
登錄ARMS控制臺,在左側導航欄選擇 。
在應用列表頁面頂部選擇目標地域,然后單擊目標應用名稱。
說明語言列的圖標含義如下:
:接入應用監控的Java應用。
:接入應用監控的Golang應用。
:接入應用監控的Python應用。
-:接入可觀測鏈路 OpenTelemetry 版的應用。
在左側導航欄中單擊應用設置,并在右側單擊自定義配置頁簽。
在自定義配置頁簽的持續剖析區域,打開總開關,并設置IP白名單或IP范圍。
在自定義配置頁簽左下角單擊保存。
查看持續剖析數據
登錄ARMS控制臺,在左側導航欄選擇 。
在應用列表頁面頂部選擇目標地域,然后單擊目標應用名稱。
說明語言列的圖標含義如下:
:接入應用監控的Java應用。
:接入應用監控的Golang應用。
:接入應用監控的Python應用。
-:接入可觀測鏈路 OpenTelemetry 版的應用。
在左側導航欄中單擊持續剖析。
在左側實例列表中選擇目標實例,然后在右側頁面設置數據展示時間。
在右側查詢頁簽,您可以執行以下操作篩選數據并查看聚合分析。
在時間窗口大小區域(圖示①)選擇快照時間大小,然后在曲線圖上通過鼠標拖拽選擇快照時間范圍。
在圖示②的下拉框可以選擇數據類型:CPU情況、JVM Heap、JVM GC。
在圖示③區域顯示了快照時間范圍內的數據列表,單擊右上角的聚合分析可以查看快照詳情。
在右側對比頁簽,您可以分別兩組篩選數據,對不同時間段的數據進行對比分析。
使用代碼熱點功能
開啟持續剖析功能后,您還可以開啟代碼熱點功能,通過持續剖析技術定時采集請求線程堆棧快照,真實還原代碼執行的第一現場。具體操作,請參見使用代碼熱點診斷慢調用鏈的問題。