高效处理鸿蒙应用运维态GPU内核泄漏
本原创文章帖发布在华为开发者联盟社区,欢迎开发者前往访问评论交流,更多与该内容相关讨论,请点击原帖查看:
概述
GPU内核泄漏是常见的泄漏类型,也是应用稳定性优化的重点方向。本文档主要介绍在运维态下通过APMS平台进行GPU内核泄漏的监控、分析、定位与修复的完整处理方法。
运维态GPU资源泄漏分析流程
标准化排查流程
整体流程图
整体排查流程如下图所示:

排查步骤
1. 创建灰度任务:在端侧集成应用灰度采集功能,通过云端平台发布应用灰度任务,圈选设备开启故障日志精准采集。
2. APMS故障预警:在APMS平台配置内核泄漏监控告警规则,设置监控时段、频率和触发条件。
3. 问题查看与聚类:通过APMS故障指标、APMS故障分析页面,可筛选GPU内核泄漏的问题,查看泄漏趋势图与TOP问题列表。
4. 根因定位与分析:通过分析故障模块、发生次数、影响设备数与最大泄漏数等关键信息,定位高优先级问题。查看问题详情,通过证据链与现场数据,深入分析泄漏原因。
5. 修复建议验证与闭环:根据修复建议优化代码,并验证修复效果,形成闭环。
具体排查操作步骤可参考下文:APMS平台GPU内核泄漏问题分析案例。
指标监控与关键信息提取
查找内核泄漏关键问题
进入故障分析页面,单击资源泄漏,在泄漏类型处选择MEMORY_LEAK/GPU_LEAK,单击查询后再单击TOP问题即可查看GPU_LEAK类型的问题数据。开发者可选择问题状态为未解决或者处理中的问题进行处理。同时,开发者应关注如下指标,进一步分析问题。关键指标说明如下:
• 故障模块:发生GPU内核泄漏的模块或组件,用于定位问题范围
• 发生次数(占比):GPU内核泄漏发生的次数及占比,帮助判断问题出现的概率
• 影响设备数(占比):受影响的设备数量及占比,评估设备层面的影响
• 最大泄漏数:GPU内核泄漏的内存大小
如下图所示:

TOP问题列表根据最大泄漏数进行排序,开发者可单击查看按钮进入故障详情页查看问题的详细信息,进一步分析问题。
提取故障详情页关键信息
进入故障详情页后,需要重点关注问题详情页的以下信息:
• 泄漏趋势图表
进入问题详情页后,单击下钻分析可设置筛选条件查看当前根因的GPU内核泄漏在不同时间、不同版本、不同设备维度的发生频率。例如,某次版本更新后该类泄漏量激增,可以提示新引入的问题。如下图所示:

• 分析报告
分析报告包括设备信息、系统版本、应用版本、ROM版本、前后台状态等,帮助开发者判断GPU内核泄漏发生的具体环境。如下图所示:

• 证据链
开发者可以通过单击证据链查看主泄漏堆块、主泄漏方法以及分配栈信息,其中疑似泄漏点会高亮标注,帮助快速定位泄漏信息。如下图所示:

• 现场数据
单击现场数据可查看GPU内核泄漏的具体泄漏类型、图片大小、图片数据量以及总泄漏大小。开发者可结合证据链中的堆栈信息,对比图片数据分析泄漏原因,从而定位具体泄漏位置。如下图所示:

• 采样栈还原堆栈
通过上传.map或.so符号表文件,可将混淆后的堆栈地址还原为可读的代码行号与函数名。如下图所示:

APMS平台GPU泄漏分析案例
灰度任务创建
应用灰度特性是一种运维态功能,用于精准采集故障日志。开发者在端侧集成应用灰度采集功能后,该应用可参与应用灰度活动。通过云端平台进行灰度采集,可圈选部分设备开启故障日志精准采集,帮助开发者快速定位故障。
APMS故障预警
1. 配置告警规则
在故障预警平台的告警规则页面创建告警。根据实际业务情况,选择合适的监控时段、监控频率、告警触发条件等。平台将GPU_LEAK归属到MEMORY_LEAK,因此开发者在配置告警规则时指标类型需要选择MEMORY_LEAK。配置完告警规则后,平台才会触发告警。如下图所示:

2. 查看告警
配置告警规则后,当应用触发MEMORY_LEAK事件后设备会进行上报故障信息。APMS平台会开始收集后台数据,当满足告警触发条件后,会触发预警。收到预警后,单击查看可进入故障指标页面。如下图所示:

3. 查看故障数据
查看故障数据的方式有两种,分别是通过故障指标页查看故障数据和通过故障分析页查看故障数据。
• 通过故障指标页查看故障数据
故障指标页面包含了趋势分析,维度分布和TOP问题列表。开发者可以在界面选择GPU_LEAK泄漏类型并设置筛选条件,以过滤出GPU内核泄漏数据,从而进行个性化分析。TOP问题列表根据最大泄漏数进行排序,开发者可结合问题状态筛选需要优先处理的问题。如下图所示:

开发者也可以直接单击故障分析页面,经过条件筛选后可查看具体的TOP问题列表。如下图所示:

问题查看与聚类
聚类规则说明
相同特征ID:平台会将GPU内核泄漏的数据根据相同故障模块聚合成一条记录,生成问题特征ID。
TOP问题查看
筛选GPU内核泄漏问题范围:在界面可以设置不同的筛选条件对GPU内核泄漏问题进行个性化分析。筛选条件设置完成后单击“查询”,即可查看指定时间范围和条件下的三类指标数据的变化趋势,包括泄漏率、泄漏次数、泄漏设备数。如下图所示:

TOP根因聚类
完成筛选后,开发者可进一步查看TOP问题列表,在问题列表中,每个问题都是同一类问题的汇总。APMS平台会将具有相同特征ID的问题聚合成一个,并按照发生次数进行排序,开发者可高优先级处理TOP问题。单击“查看”进入问题详情页,进一步查看问题详情。如下图所示:

根因定位与分析
单击资源泄漏信息详情列表某个问题进入详情页后,开发者可按照如下步骤定位问题根因。
基础定位信息分析
1. 查看问题概要:问题概要会展示问题的核心身份信息,包括问题特征ID、故障原因、故障模块,帮助开发者快速判断GPU内核泄漏的基本属性。如下图所示:

2. 查看分析报告:分析报告会提供问题发生时的完整上下文,包括环境信息(设备型号、系统版本、ROM版本、前后台状态等)、堆栈信息、日志文件,并基于分析结果给出修复建议,辅助开发者高效完成问题排查与闭环。如下图所示:

3. 查看故障详情:开发者可根据平台给出的修复建议定位代码问题,完成问题修复。如下图所示:

4. 查看证据链:开发者可以通过证据链查看主泄漏堆块、主泄漏方法以及分配栈信息,其中疑似泄漏点会高亮标注。开发者可结合分配栈中的方法信息定位到业务代码中的泄漏处。如下图所示:

5. 查看现场数据:现场数据展示了GPU内核泄漏的具体泄漏类型、图片大小、图片数据量以及总泄漏大小。开发者可结合证据链中的堆栈信息,对比图片数据分析泄漏原因,从而定位具体泄漏位置。如下图所示:

6. 查看采样栈信息:通过上传SourceMap或.so符号表文件,可将混淆后的堆栈地址还原为可读的代码行号与函数名。如下图所示:

下钻分析
下钻分析的核心逻辑是从一个汇总的指标或表象问题出发,将其拆分成多个组成部分。然后筛选出最关键的线索继续向下拆分,不断重复这个过程,直到定位到具体的根因。平台会根据故障特征ID进行聚类并筛选TOP应用版本、系统版本以及设备型号。开发者可根据此重点关注问题高发的版本及设备,更精确地定位问题。如下图所示:

修复建议验证与闭环
修复建议
故障详情页面会给到修复建议,开发者可以通过给出的建议优化代码。如下图所示:

修复建议与闭环
1. 修改问题之后,可以在分析页面的问题列表中,将对应的问题处标记已修改,并关注新版本的GPU内核泄漏数据。
2. 应用发布后,可在故障分析页面筛选新版本数据和旧版本数据,对比修复前后的泄漏率,确认修复是否有效。如下图所示:

基于Operation Analyzer平台分析
Operation Analyzer平台是指DevEco Studio的Operation Analyzer插件。在DevEco Studio上可以通过此插件查看到应用对应的故障数据,数据和APMS平台上一致。
Operation Analyzer平台入口
打开DevEco Studio后,在左侧可看到Operation Analyzer图标,单击后选择应用,再单击资源泄漏,查看GPU_LEAK类型的数据。如下图所示:

如果左侧没有出现Operation Analyzer平台图标,也可通过上方导航栏的视图窗口进入。如下图所示:

问题分析
• Operation Analyzer平台问题查看
开发者可自定义筛选条件,筛选需要查看的问题,单击TOP Issues,选择下方类型为GPU_LEAK的数据,单击即可查看当前GPU内核泄漏问题的详细信息。如下图所示:
平台的问题详情页同APMS平台功能相同,开发者可参考修复建议进行修复。如果修复建议不能支撑解决,可进一步查看证据链、现场数据进行具体分析。如下图所示:

开发者也可以查看问题分布图表,定位问题高发的应用版本、设备型号与系统版本,辅助进一步分析。如下图所示:

• Operation Analyzer关联离线符号表
Operation Analyzer平台提供了堆栈还原的能力,可以通过上传符号表(.so/.map/.json文件)完成堆栈还原,辅助分析问题。
选择本地符号表,如下图所示:

完成堆栈还原,如下图所示:

Operation Analyzer关联代码
堆栈还原后,Operation Analyzer平台可将故障处与项目代码相关联,单击故障处可跳转到对应源码中,可辅助开发者更高效地定位问题。
关联项目代码,如下图所示:

关联效果确认,如下图所示:

问题修复
Operation Analyzer平台会给出故障分析与修复建议,开发者可根据修复建议修复问题代码。如下图所示:

🔗 官网开发者学堂视频:华为开发者学堂

🔗 社区DFX专题文章: 华为开发者问答 | 华为开发者联盟


【扫码加入 HarmonyOS DFX 技术交流群】
更多推荐



所有评论(0)