
本原创文章帖发布在华为开发者联盟社区欢迎开发者前往访问评论交流更多与该内容相关讨论请点击原帖查看运维态高效处理ArkTS泄漏-华为开发者话题 | 华为开发者联盟1.1 运维态ArkTS内存泄漏分析流程1.1.1 整体流程图1.1.2 排查步骤步骤1故障预警配置-在APMS平台配置ArkTS泄漏监控告警规则设置监控时段、频率和触发条件。步骤2问题发现与筛-选通过故障预警或主动分析页面筛选JS_LEAK类型的泄漏问题。步骤3关键信息提取-分析故障模块、发生次数、影响设备数等关键信息定位高优问题。步骤4根因定位-通过证据链、持有链分布和现场数据深入分析泄漏原因。步骤5修复与验证-根据修复建议优化代码并验证修复效果形成闭环。1.1.3 指标监控与关键信息提取1.1.3.1 资源泄漏监控信息详情故障分析表格会将相同根因类型的故障聚类并排序。表格会展示故障模块、发生次数占比、影响设备数占比等关键信息开发者可以通过发生占比和故障模块结合业务实际情况找出高优的问题并在问题状态和优先级这一栏做出标记优先解决高优的问题。页面入口故障分析-资源泄漏-资源泄漏信息详情。关键指标说明•问题特征ID按照故障模块取的哈希值•故障模块发生泄漏的模块或组件用于定位问题范围•发生次数占比泄漏问题发生的频率帮助判断问题严重程度•影响设备数占比受影响的设备数量评估问题影响面•最大泄漏数单次泄漏的最大对象数量•Retained Size表示当该对象被垃圾回收时能释放的总内存大小包括对象自身及其所有可达引用的对象1.1.3.2 故障详情页面介绍故障详情页面可以通过证据链和现场数据进一步深入分析泄漏的原因。证据链证据链表格根据泄漏类型的大小可以查看主泄漏对象和次泄漏对象以及对象泄漏大小的占比。持有链分布通过持有链可以查看各泄漏对象及其持有情况。一般来说应该从根节点入手分析是否可以释放掉持有的子对象。现场数据分析现场数据是该快照中TOP10的相同最短引用链的聚合情况开发者可以通过现场快照分析最短引用链。开发者也可以下载日志结合日志进一步分析。关键指标说明•Shortest Path ToGCRoot表示从垃圾回收根节点GC Root到目标对象的最短引用链。这条路径显示了对象为何无法被回收的最直接的引用关系是定位内存泄漏的关键信息。•Count引用链数量•Shallow Size表示该对象的实际大小不包含其引用对象的大小•Shallow Size Ratio%Shallow Size百分占比•Retained Size表示Shallow Size的总大小加上因为此类对象而驻留被此类对象引用而无法释放的其他对象的总大小•Retained Size Ratio%Retained Size百分占比1.2 APMS平台ArkTS泄漏分析案例1.2.1 灰度任务创建开发者在端侧集成应用灰度功能后该应用可参与应用灰度活动。通过云端平台发布应用灰度任务可圈选部分设备开启故障日志精准采集帮助开发者快速定位故障。详情可见应用灰度故障 维测能力 。1.2.2 APMS 故障预警可以在故障预警平台的告警规则页面新建告警。根据实际的业务情况选择合适监控时段、监控频率、告警触发条件以及其他告警指标其中ArkTS泄漏对应的指标类型为MEMORY_LEAK。创建告警之后后台会开始收集数据。当泄漏达到告警阈值后会触发故障预警。通过操作查看选项可以跳转到故障指标页面查看故障详情。也可以在故障分析页面通过泄漏类型应用版本等相关信息筛选出对应的泄漏信息。1.2.3 问题查看与聚类1.2.3.1 聚类规则说明聚类规则主要分为三种名称聚类引用链聚类和属性聚类。不同类型的对象需要使用不同的聚类方法。具体的距离规则可以参考JS 泄漏聚类规则1.2.3.2 问题查看1.2.3.2.1 Top问题查看1. 通过故障预警的指引在故障分析页面筛选出JS_LEAK的泄漏类型。2. 开发者需要关注页面的故障模块发生次数和最大泄漏数量。如果泄漏对象是开发者自定义对象可以通过故障模块确认自定义对象的位置进一步缩小排查范围。3. 开发者可在问题状态、优先级、描述栏目内填写问题备注结合故障模块、异常发生占比与实际业务场景筛选高优先级问题并完成标注。4. 点击操作列的查看按钮即可查看泄漏对象完整故障详情进一步确认泄漏对象。1.2.3.2.2 Top ArkTS泄漏对象聚合平台会根据ArkTS泄漏对象的类型做聚合开发者通过这个页签可以查看泄漏对象的对象信息、对象总次数、出现快照数、最大Retained Size和平均Retained Size等数据。当泄漏的对象为开发者自定义对象时对象信息会显示出对应的对象名称开发者可以通过名称找到业务代码中泄漏的对象并优化相关代码。点击查看按钮可以查看当前泄漏对象故障详情进一步确认泄漏对象。1.2.4 根因定位与分析Top问题页签的查看操作或者ArkTS泄漏对象聚合页签查看个例按钮可以跳转到泄漏故障详情页面。故障详情页面提供了证据链现场数据等信息帮助开发者定位到问题根因。1.2.4.1 证据链分析主泄漏对象:泄漏问题中Retained Size占比最大的对象主泄漏对象展示了泄漏对象的名称Retained Size的大小占总Retained Size的实例。次泄漏对象:泄漏问题中Retained Size占比最大之外的其他对象。持有链分布:从 GC Root 到对象的引用路径显示哪些对象持有该对象的引用。持有链分布详情:泄漏对象的持有链详细信息。包含对象名称数量对象的实际大小以及引用链关联的对象。1.2.4.2 现场数据分析该快照中TOP10的相同最短引用链的聚合情况如果证据链中的泄漏信息不足以支持定位可以查看最短引用链进一步分析。1.2.4.3 下钻分析下钻分析是指从宏观汇总数据逐层点进来看更细的明细数据用来定位问题、找到原因。平台会根据当前问题的故障特征ID进行筛选并展示应用版本TOP5、系统版本TOP5、设备型号TOP5这三个维度的信息帮助进一步缩小版本排查范围。1.2.5 修复建议验证与闭环1.2.5.1 修复建议故障详情页面会提供修复建议开发者可以通过给出的建议优化代码。一般来说开发者需要根据引用链尝试定位并断开应用侧的引用链路释放对应的可疑泄漏对象。如果修复建议是修改global handle则参考《开发态快速定位 ArkTS 泄漏 》。1.2.5.2 修复建议与闭环问题修改开发者根据修改建议在工程中优化掉主要的泄漏对象。问题标记优化之后可以在分析页面对对应的泄漏对象标记。应用发布应用发布之后更新平台告警规则并持续关注新版本的崩溃数据。对比修复前后的问题发生率确认修复是否有效。1.2.6 基于Operation Analyze平台分析Operation Analyze平台是指DevEco Studio的Operation Analyzer 插件。在DevEco Studio上可以通过此插件查看到应用对应的故障数据数据和APMS平台上一致开发者在IDE上也可以使用相同的方式分析运维态的泄漏问题。1.2.6.1 Operation Analyzer平台入口打开DevEco后在Tool Windows栏的Operation Analyzer进入平台点击后根据包名选择应用再点击资源泄漏Resource Leak即可查看该类故障相关数据。1.2.6.2 问题分析分析证据链数据和流程同APMS平台分析流程一致分析线程数据数据和流程同APMS平台分析流程一致