运维态高效处理Native泄漏

0 评论 124 浏览 0 收藏 16 分钟

 Native内存泄漏是一种比较常见的泄露类型。本文档主要介绍在运维态下如何通过APMS平台进行Native内存泄露的监控、分析、定位与修复整套处理方法。

本原创文章帖发布在华为开发者联盟社区,欢迎开发者前往访问评论交流,更多与该内容相关讨论,请点击原帖查看:

运维态高效处理Native泄漏-华为开发者话题 | 华为开发者联盟

1.1 运维态Native泄漏分析流程

Native内存泄漏是一种比较常见的泄露类型。本文档主要介绍在运维态下如何通过APMS平台进行Native内存泄露的监控分析、定位修复整套处理方法

1.1.1 标准化排查流程

1.1.1.1 整体流程图

1.1.1.2 排查步骤

       步骤1 APMS 故障预警 –  APMS 平台配置 Native 泄漏监控告警规则,设置监控时段、频率和触发条件。

       步骤2 问题查看与聚类 – 通过故障预警或主动分析页面,筛选 PSS_MEMORY  RSS_LEAK 类型的泄漏问题,查看Native泄漏趋势与Top问题列表。

       步骤3 根因定位与分析 – 分析故障模块、发生次数、影响设备数等关键信息,定位高优问题。查看问题详情,通过证据链、分配信息和符号表还原堆栈,深入分析泄漏原因。

       步骤4 修复与验证闭环 – 根据修复建议优化代码,并验证修复效果,形成闭环。

       具体排查操作步骤可参考文档第2节:Native泄漏分析案例。

1.1.2 指标监控与关键信息提取

1.1.2.1 Native泄漏监控信息详情

故障分析页面,APMS 基于堆栈关键行进行准确的同类异常汇聚,将具有相同泄漏根因和主泄漏方法的异常报告自动聚合成一类问题,按照发生占比排序。开发者可查看应用的Top问题列表,结合业务对问题进行描述,标记优先级与问题状态,高优处理未修复的高优先级问题。

1.1.2.2 关键指标说明

       • 故障模块:发生泄漏的模块或组件,用于定位问题范围

       • 发生次数(占比):泄漏问题发生的频率,帮助判断问题严重程度

       • 影响设备数(占比):受影响的设备数量,评估问题影响面

1.1.2.3 故障详情页关键信息提取

故障详情页面可以通过证据链和堆栈信息进一步分析泄漏的原因。

1.1.2.3.1 证据链

证据链根据泄漏堆块的分配内存大小区分主次泄漏堆块。展示主次可疑泄漏方法详情以及对应的修复建议。排查优先从主泄漏堆块切入,核查主泄漏方法是否存在异常。

1.1.2.3.2 分配栈信息

分配栈信息会展示当前选中的泄漏堆块和泄漏方法对应的堆栈信息。通过堆栈分配详情、堆栈树分配和火焰树三种不同的形式展现,以便开发者更直观更便携地查看分配栈信息。

1.1.2.3.3 还原堆栈(符号表上传)

通过上传 SourceMap 或 .so 符号表文件,可将混淆后的堆栈地址还原为可读的代码行号与函数名。

1.2 APMS平台Native泄露分析案例

1.2.1 灰度任务创建

开发者在端侧集成应用灰度功能后,该应用可参与应用灰度活动。通过云端平台发布应用灰度任务,可圈选部分设备开启故障日志精准采集,帮助开发者快速定位故障。

详情可见应用灰度故障 维测能力 

1.2.2 APMS故障预警

可以在故障预警平台的告警规则页面,新建告警任务。结合实际业务场景,选择合适的监控时段、监控频率、告警触发条件及其他告警指标,其中 Native 泄漏对应的指标类型为 MEMORY_LEAK。

建议配置以下告警规则:

配置告警规则后,当应用触发Native泄漏事件,设备会进行上报故障信息。系统会开始收集后台数据,当满足告警触发条件后,会触发预警。可参考下图步骤查看触发的故障告警。

收到预警后,可以点击查看进入故障指标页面。

故障指标页面包含了趋势分析,维度分布和Top问题列表。开发者可以在界面可以设置不同的筛选条件对冻屏问题进行个性化分析。点击Top问题列表中的查看,可以进入问题详情页查看问题详情近一步分析。

开发者也可以直接点击故障分析页面,经过条件筛选后可查看具体的Top问题列表,点击查看按钮可进入问题详情页进一步分析。

1.2.3 问题查看与聚类

1.2.3.1 聚类规则说明

平台根据以下规则进行问题聚类:

       • 相同特征ID:将具有相同问题特征ID的问题聚合在一起

1.2.3.2 TOP根因聚类

在问题列表中,每个问题都是同一类问题的汇总。APMS 基于堆栈关键行进行准确的同类异常汇聚,将具有相同或相似泄漏堆栈的异常报告自动聚合成一个问题。点击“查看”进入问题详情页,查看问题详情。

1.2.4 根因定位与分析

1.2.4.1 基础信息定位

点击问题列表中的某个问题进入详情页后,APMS 将提供以下核心分析信息,帮助开发者高效定位根因。

问题概要:展示问题的核心身份信息,包括故障类型、故障模块,帮助开发者快速判断崩溃的基本属性。

聚类数据:基于堆栈关键行和过滤筛选跳转聚类同类故障,帮助开发者评估问题的影响范围与严重程度。

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

1.2.4.2 证据链分析

证据链展示主泄露和次泄露具体方法位置。开发者可根据平台解析出的泄漏堆栈和故障原因,参照优化建议定位问题代码,完成修复与验证。

根据故障详情分析得出:可以看出规格为4096 B的堆块为核心泄漏堆块,libanon.so 为核心泄漏库,leak thread 为核心泄漏方法。

堆栈信息分析:三种形式(堆栈分配、堆栈树和火焰图)查看方法调用关系、以及疑似泄漏故障处。

1.2.4.3 下钻分析

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

1.2.5 修复与验证闭环

1.2.5.1 修复建议

故障详情页面会给到修复建议,开发者可以通过给出的建议代码需要优化的部分。

1.2.5.2 修复建议与闭环

1.修改问题之后,可以在分析页面对应的泄漏对象标记已修改,并关注新版本的崩溃数据。

2.对比修复前后的问题发生率,确认修复是否有效。

1.2.6 基于Operation Analyzer平台分析

Operation Analyzer平台是指DevEco Studio的Operation Analyzer插件。在DevEco Studio上可以通过此插件查看到应用对应的故障数据,数据和APMS平台上一致。

1.2.6.1 Operation Analyzer平台入口

打开DevEco Studio后,在左侧可看到Operation Analyzer图标,点击后选择应用,再点击应用冻屏即可查看该类故障数据。

1.2.6.2 问题分析

Operation Analyzer平台问题查看:开发者可自定义筛选条件筛选需要查看的问题,可点击功能列表下具体的问题进一步查看问题详情。

Operation Analyzer平台问题详情:

平台的问题详情页同APMS平台功能相同,开发者可查看故障分析与修复建议排查问题。如果修复建议不能支撑解决,可近一步查看证据链、现场数据进行具体分析。

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

Operation Analyzer关联离线符号表:

Operation Analyzer平台提供了堆栈还原的能力,可以通过上传符号表(.so/.map/.json文件)完成堆栈还原,辅助分析问题。

Operation Analyzer关联代码:

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

1.2.6.3 问题修复

Operation Analyzer平台会给出泄漏堆块、泄漏函数与修复建议,开发者可根据修复建议修复问题代码。

本文由 @华为开发者联盟 授权发布于人人都是产品经理。未经作者许可,禁止转载

题图来自Unsplash,基于CC0协议

该文观点仅代表作者本人,人人都是产品经理平台仅提供信息存储空间服务

更多精彩内容,请关注人人都是产品经理微信公众号或下载App
评论
评论请登录
  1. 目前还没评论,等你发挥!