运维态高效处理ArkTS泄漏

0 评论 123 浏览 0 收藏 14 分钟

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

运维态高效处理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 To GCRoot:表示从垃圾回收根节点(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平台分析流程一致

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

题图来自Unsplash,基于CC0协议

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

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