HarmonyOS 鸿蒙Next应用发热问题排查指南

发布于 1周前 作者 caililin 来自 鸿蒙OS

HarmonyOS 鸿蒙Next应用发热问题排查指南

问题背景

在应用使用过程中,出现设备发热的情况

排查思路

发热问题主要是排查整机的功耗情况,对于应用侧来说,主要是排查的方向有:

1CPU上的负载是否符合预期;

2、内存是否合理使用导致频繁GC

3、页面是否存在冗余绘制的情况。

排查步骤如下:

1、关闭USB充电模式,通过DevEco Profiler实时监控温度和功耗,明确发热问题的具体场景以及功耗来源。

2、通过Frame Profiler录制对应场景,分析CPU频点及负载情况:

a. 如果是CPU核上存在GC线程负载较高,需要通过AllocationSnapshot模板来分析内存使用情况。

b. 如果是CPU核上存在应用侧子线程负载较高,借助Callstack泳道分析函数栈,排查业务逻辑是否存在异常。一般频繁执行了长耗时任务,或者进入异常业务逻辑导致无限循环。

c. 如果是CPU核上UI主线程负载较高,通过Trace泳道分析是否存冗余绘制及组件未复用等情况。

排查流程图如下:

be62849d5da59d168c85066aee8b7631_585x564.png

1、确认功耗来源

避免充电对观察功耗的影响,在分析问题期间,可以通过设置 -> 系统 -> 开发者选项 -> 关闭充电设置关闭USB充电选项。使用Profiler实时监控能力观察设备温度变化,以及各器件的功耗数据,确定发热场景和功耗来源。具体使用可以参考:实时监控

zh-cn_image_0000002062530546.png

Temperature:显示了当前设备温度信息,3秒一个采集周期,如果温度持续上升,说明已确认发热场景。

Device Current:当前设备最大电流、平均电流以及最新的电流值(如果出现负数,说明是在充电)。

Energy泳道:展示各项部件(主要关注CPUDisplayGPU)的周期内平均功耗占比。

2、使用Frame Profiler分析CPU负载

开启Frame Profiler采集后,复现问题场景,在CPU Core泳道中观察运行时长占比比较高的线程。具体使用可以参考:CPU活动分析

zh-cn_image_0000002099506933.png

如果是应用侧线程负载较高,使用Callstack分析对应线程在执行的任务,结合函数栈分析业务逻辑是否存在异常,一般频繁执行了长耗时任务,或者业务逻辑导致无限循环。具体使用可以参考:基础耗时分析

zh-cn_image_0000002099627413.png

案例一:应用侧某线程负载高

采集完Trace后,观察CPU核的频点很高,CPU调度很频繁,框选CPU Core泳道后,查看CPU负载来源。

zh-cn_image_0000002099526733.png

通过详情区,可以看到CPU的负载主要来源应用侧子线程,通过排查,该线程和页面绑定,在页面切换时未释放。

zh-cn_image_0000002063647806.png

案例二:应用侧业务线程负载高

采集完Trace后,观察CPU部分核上频点很高,基本在最高频运行,框选对应泳道后,查看CPU负载来源。

zh-cn_image_0000002097883125.png

通过详情区,可以看到CPU的负载来源,应用侧业务线程负载很高,通过排查,发现是在弱网环境下,在该线程中频繁请求网络。

zh-cn_image_0000002098001953.png

案例三:GC线程负载高

采集完Trace后,观察CPU部分核上频点很高,基本在最高频运行,框选对应泳道后,查看CPU负载来源。

zh-cn_image_0000002062043570.png

通过详情区,可以看到CPU的负载来源,应用进程下的OS_GC_Thread线程负载很高,需要借助AllocationSnapshot模板分析内存使用情况。GC策略可以参考:GC垃圾回收Allocation使用可以参考:内存分析及优化

zh-cn_image_0000002061886930.png

案例四:UI主线程负载高

采集完Trace后,观察CPU部分核上频点很高,基本在最高频运行,框选对应泳道后,查看CPU负载来源。

zh-cn_image_0000002099690589.png

通过详情区,可以看到CPU的负载来源是UI主线程

zh-cn_image_0000002099861473.png

找到对应线程的Trace泳道,里面也包含了线程运行状态,可以在详情区看到Running占比非常高

zh-cn_image_0000002063553682.png

发现有个Image组件一直再执行绘制任务,后续借助ArkUI Inspector排查到是不可见的区域有个图片一直绘制。ArkUI Inspector使用参考:布局分析

zh-cn_image_0000002063832148.png

关于低功耗可以参考官网的最佳实践

1 回复

作为IT专家,对于HarmonyOS 鸿蒙Next应用发热问题的排查,我有以下专业建议:

首先,需要关注几个关键的评测指标,包括CPU使用率、GPU使用率、电池温度和设备温度传感器数据。高CPU和GPU使用率通常是导致设备发热的主要原因,而电池温度和设备温度传感器数据则直接反映了设备的热状况。

为了进行更深入的分析,可以利用Trace数据。使用SmartPerf Host或DevEco Studio等工具收集设备在运行应用时的Trace数据,然后对这些数据进行处理和可视化,生成CPU/GPU使用率曲线、温度变化曲线等。通过分析这些曲线,可以定位高负载的时间段和对应的进程或线程,并进一步分析频率调整和异常行为。

此外,还有一些通用的优化措施,比如优化应用代码,减少不必要的计算和资源消耗;避免在后台运行过多的应用和服务;以及调整设备的屏幕亮度、分辨率等设置,以减少设备的功耗和发热。

在进行以上排查和优化后,如果问题依旧存在,建议访问HarmonyOS的开发者社区或论坛,寻求其他开发者的帮助和经验分享。同时,也可以考虑联系官网客服,获取更专业的技术支持和指导。官网地址是:https://www.itying.com/category-93-b0.html

回到顶部