CPU负载是3秒内的平均负载值。如果线程连续在大核最高频率下运行3秒,负载值将达到100%。当线程在不同的核心、不同的频率下运行,且运行时间不同时,将根据芯片的计算能力和运行时间进行相应的比例折算。
对于CPU高负载问题的分析,需要在Profiler工具中启动Energy模板分析任务,并重现问题场景。
IDE工具中集成了CPU高负载故障的异常检测功能,操作步骤如下:

CPU负载是3秒内的平均负载值。如果线程连续在大核最高频率下运行3秒,负载值将达到100%。当线程在不同的核心、不同的频率下运行,且运行时间不同时,将根据芯片的计算能力和运行时间进行相应的比例折算。

CPU高负载问题通常涉及以下三种情况:
针对上述情况进行详细分析和定位,确认根本原因后进行修复,随后观察功耗和发热情况是否满足性能要求。如不满足,则需重复上述分析和定位过程。

某应用使用过程中,边刷视频边查看评论或推荐时,手机发烫严重,关闭应用后逐渐恢复正常。
选择CPU Core泳道,通过下方详情区可以看出应用进程占比时长较高。

查看CPU频点情况,通过查看Frequency泳道发现CPU核的频点都很高,CPU调度非常频繁。
Frequency子泳道:表示CPU频率,鼠标悬浮在Frequency泳道上,可以看到CPU的运行频率。

当所有CPU核频点都较高时,选择CPU Core泳道,查看CPU负载来源。通过详情区,可以看到CPU负载主要来源于应用侧的子线程(线程号55523)。

某应用使用期间,屏幕发烫严重,壳温高达40摄氏度;结束应用后,温度自行恢复正常。
选择CPU Core泳道,通过下方详情区可以看出,应用进程占比时长较高。不同应用的应用进程名称不同,一般与应用包名一致。

查看CPU频点情况,通过查看Frequency泳道的CPU频率可以看出CPU部分核上频点很高,基本保持在最高频状态运行。即下图中的CPU10、CPU11,其对应的Frequency子泳道基本被填满。

当部分核频点较高时,选择CPU频点比较高的核对应的Slice子泳道,查看CPU负载来源。即CPU10与CPU11对应的Slice子泳道,通过详情区可以看到CPU负载主要来源于应用进程的OS_GC_Thread线程。


在某应用上进入直播页面进行观看,功耗超100mA,手机温度持续升高。
选择CPU Core泳道,通过下方详情区可以看出,应用进程占比时长较高。

查看CPU频点情况,通过查看Frequency泳道发现CPU部分核(CPU10、CPU11)的频点很高,且每个CPU核调度都非常频繁。

选择CPU Core泳道,查看CPU负载来源。通过详情区,可以看到CPU负载主要来源于应用UI主线程(线程号43436,与应用进程号一致为主线程)。

找到UI主线程对应的Trace泳道(可以根据应用包名或上一步中的线程号查找)。选择对应的线程泳道,可以看到详情区包含了线程运行状态,选择Thread States,可以看出Running状态占比非常高。

查看Slice List,检查是否存在冗余绘制及组件未复用等情况。选择Slice List,发现id为-1的Image一直在执行绘制任务,Occurrences达到了4万多次。然后借助ArkUI Inspector工具进行排查确认组件是否存在冗余绘制情况。关于ArkUI Inspector的使用可参考:布局分析。
