全部產品
Search
文件中心

Application Real-Time Monitoring Service:使用CPU熱點診斷CPU消耗高的問題

更新時間:Jul 06, 2024

ARMS CPU熱點作為一種監控診斷工具,通過持續剖析技術定時採集正在執行CPU線程的方法棧快照,定位CPU使用率高的根因。當系統CPU使用率較高時,ARMS CPU熱點可為您快速定位導致CPU消耗高的相關商務邏輯方法棧。

重要

開啟該功能會增加約5%額外CPU開銷,使用前請提前預留相應量可用資源。

開啟CPU熱點

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

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

    說明

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

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

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

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

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

  4. 持續剖析地區開啟總開關,然後開啟CPU熱點開關,配置需要開啟的應用執行個體的IP地址或者一組執行個體所屬的網段地址。

  5. 在頁面底部單擊儲存

    無需重啟應用即可生效。

通過持續剖析查看CPU熱點資料

樣本:一個每秒在CPU上執行500 ms的方法。

public class CPUPressure {

    //請求入口方法
   public void runBusiness() {
        long start = System.currentTimeMillis(), period = 0;
        while (period <= 500L) {
            period = System.currentTimeMillis() - start;
        }
    }
}
  1. 登入ARMS控制台,在左側導覽列選擇應用監控 > 應用列表

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

    說明

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

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

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

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

  3. 在左側導覽列單擊持續剖析,在左側執行個體列表中選擇目標執行個體,然後在右側版面設定資料展示時間。

  4. 在右側查詢頁簽,您可以篩選資料並查看彙總分析。

    說明

    效能分析類型:

    • CPU Time:CPU申請量熱點剖析資料。

    • Allocated Memory:記憶體申請量熱點剖析資料。

    • Allocations:記憶體申請次數熱點剖析資料,可以查看哪些方法申請記憶體次數頻繁。

    image

  5. 單擊彙總分析,在新頁面中選擇效能分析類型CPU Time

    image

    圖中左側為本次調用中涉及的所有方法CPU資源使用方式列表,右側為對應方法所有方法棧資訊繪製的火焰圖。其中:

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

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

    根據上圖,進行如下分析:

    1. 將Self值從大到小排列,找到並單擊Self值最大的方法java.lang.System.currentTimeMillis(),右側火焰圖中將會聚焦相關方法。

      image

    2. 聚焦後可以發現,java.lang.System.currentTimeMillis()就是右側火焰圖中的最寬棧頂方法。

    3. 由於該棧頂是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,與樣本情境邏輯吻合。