运维态高效处理Native泄漏
本原创文章帖发布在华为开发者联盟社区欢迎开发者前往访问评论交流更多与该内容相关讨论请点击原帖查看运维态高效处理Native泄漏-华为开发者话题 | 华为开发者联盟1.1 运维态Native泄漏分析流程Native内存泄漏是一种比较常见的泄露类型。本文档主要介绍在运维态下如何通过APMS平台进行Native内存泄露的监控、分析、定位与修复整套处理方法。1.1.1 标准化排查流程1.1.1.1 整体流程图1.1.1.2 排查步骤步骤1APMS故障预警- 在 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平台会给出泄漏堆块、泄漏函数与修复建议开发者可根据修复建议修复问题代码。