全部产品
Search
文档中心

应用实时监控服务ARMS:使用CPU热点诊断CPU消耗高的问题

更新时间:May 28, 2026

ARMS CPU热点通过持续剖析技术定时采集正在执行CPU线程的方法栈快照,定位CPU使用率高的根因。当系统CPU使用率较高时,可快速定位导致CPU消耗高的业务逻辑方法栈。

前提条件

  • 已为目标应用安装 ARMS Agent 并接入应用监控。

  • 已预留约 5% 的额外 CPU 资源裕量,以满足持续剖析功能对性能的额外开销需求。

重要

开启该功能会增加约5%额外CPU开销,使用前请提前预留相应量可用资源。

开启CPU热点

  1. 登录,在左侧导航栏中选择应用监控 > 应用列表

  2. 应用列表页面,在顶部导航栏选择地域,单击目标应用名称。

  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. 登录,在左侧导航栏中选择应用监控 > 应用列表

  2. 应用列表页面,在顶部导航栏选择地域,单击目标应用名称。

  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.63 s,占整张火焰图的91.44%。因此,com.alibaba.cloud.pressure.memory.CPUPressure.runBusiness()是该采集时段内资源占用较高的显著瓶颈,可根据方法名梳理业务逻辑,查看是否存在优化空间。

通过上述分析,可以看到在1分钟内,com.alibaba.cloud.pressure.memory.CPUPressure.runBusiness()方法耗时28.63 s,与示例场景逻辑吻合。

相关文档

使用持续剖析功能排查慢调用链和内存使用率较高问题的操作如下:

持续剖析功能使用过程中的常见问题,请参见常见问题