ARMS CPU熱點作為一種監控診斷工具,通過持續剖析技術定時採集正在執行CPU線程的方法棧快照,定位CPU使用率高的根因。當系統CPU使用率較高時,ARMS CPU熱點可為您快速定位導致CPU消耗高的相關商務邏輯方法棧。
開啟該功能會增加約5%額外CPU開銷,使用前請提前預留相應量可用資源。
開啟CPU熱點
登入ARMS控制台,在左側導覽列選擇 。
在應用列表頁面頂部選擇目標地區,然後單擊目標應用程式名稱。
說明語言列的表徵圖含義如下:
:接入應用監控的Java應用。
:接入應用監控的Golang應用。
-:接入Managed Service for OpenTelemetry的應用。
在左側導覽列中單擊應用設定,然後單擊自訂配置頁簽。
在持續剖析地區開啟總開關,然後開啟CPU熱點開關,配置需要開啟的應用執行個體的IP地址或者一組執行個體所屬的網段地址。
在頁面底部單擊儲存。
無需重啟應用即可生效。
通過持續剖析查看CPU熱點資料
樣本:一個每秒在CPU上執行500 ms的方法。
public class CPUPressure {
//請求入口方法
public void runBusiness() {
long start = System.currentTimeMillis(), period = 0;
while (period <= 500L) {
period = System.currentTimeMillis() - start;
}
}
}
登入ARMS控制台,在左側導覽列選擇 。
在應用列表頁面頂部選擇目標地區,然後單擊目標應用程式名稱。
說明語言列的表徵圖含義如下:
:接入應用監控的Java應用。
:接入應用監控的Golang應用。
-:接入Managed Service for OpenTelemetry的應用。
在左側導覽列單擊持續剖析,在左側執行個體列表中選擇目標執行個體,然後在右側版面設定資料展示時間。
在右側查詢頁簽,您可以篩選資料並查看彙總分析。
說明效能分析類型:
CPU Time:CPU申請量熱點剖析資料。
Allocated Memory:記憶體申請量熱點剖析資料。
Allocations:記憶體申請次數熱點剖析資料,可以查看哪些方法申請記憶體次數頻繁。
單擊彙總分析,在新頁面中選擇效能分析類型為CPU Time。
圖中左側為本次調用中涉及的所有方法CPU資源使用方式列表,右側為對應方法所有方法棧資訊繪製的火焰圖。其中:
Self列表示方法在自身的調用棧中所消耗的時間或資源,不包括其子方法調用所消耗的時間或資源。可以用於識別哪些方法在自身內部花費了大量的時間或資源。
Total列包含方法自身消耗的時間或資源,及其所有子方法調用所消耗的時間或資源。可以協助瞭解整個方法調用棧中哪些方法貢獻了最多的時間或資源。
根據上圖,進行如下分析:
將Self值從大到小排列,找到並單擊Self值最大的方法java.lang.System.currentTimeMillis(),右側火焰圖中將會聚焦相關方法。
聚焦後可以發現,java.lang.System.currentTimeMillis()就是右側火焰圖中的最寬棧頂方法。
由於該棧頂是JDK中的庫函數,並非為業務方法,因此,沿著棧頂方法java.lang.System.currentTimeMillis()從下往上搜尋,依次經過java.lang.System.currentTimeMillis() > com.alibaba.cloud.pressure.memory.CPUPressure.runBusiness(),而com.alibaba.cloud.pressure.memory.CPUPressure.runBusiness()屬於所分析應用的業務方法,其耗時為28.63s,佔到整張火焰圖的91.44%,因此com.alibaba.cloud.pressure.memory.CPUPressure.runBusiness()是該火焰圖所採集時段內資源佔用較高的顯著瓶頸所在,可以根據相關方法名,對業務中相關方法的邏輯進行梳理,查看是否存在最佳化空間。
通過上述分析,可以看到在1分鐘內,com.alibaba.cloud.pressure.memory.CPUPressure.runBusiness()方法耗時28.63 s,與樣本情境邏輯吻合。