写点什么

Lyft 如何检测生产中安卓的内存泄漏

  • 2023-03-22
    北京
  • 本文字数:849 字

    阅读完需:约 3 分钟

Lyft如何检测生产中安卓的内存泄漏

尽管现代的安卓和 iOS 工具都能通过本地构建检测内存泄露风险,但应用程序在生产环境中的内存表现却依旧得不到百分百的保障。生产环境中的程序可能在各种条件下运行在各种设备上,为此,Lyft的工程师将A/B测试与内存可观察性相结合,从而检测可能造成内存泄漏的应用功能。


在发布大型且复杂的功能点时,我们需要特别关注其在内存使用方面是否会造成回归。这点在包含本地 C/C++代码的功能发布时更为关键,因为这部分代码更易于引入内存泄漏。


在一般情况下,Lyft 工程师所遵循的方式是用测量的应用程序的标准内存行为基线,对比在 A/B 测试中所采集的特定功能受众子群数据。在评估应用的整体内存使用上,Lyft 工程师考虑了几款安卓上可用来检索内存使用指标的API:比例集大小(PSS)、唯一集大小(USS)、常驻内存大小(RSS)。其中 RSS 因其在性能方面的特点,以及可以不受采样率限制的特性而脱颖而出。其他 Lyft 工程师们感兴趣的指标,如 JVM 堆和本地堆大小等,都支持在安卓运行时直接采集。


内存指标的重要采集场景有两种:每次 UI 界面关闭时,以及用户在同一界面长时间停留的情况下每分钟的采集间隔。


因此,为判断一项功能是否会造成内存回归,Lyft 工程师对比了用户群组在运行禁用该功能时的原始版本,与启用该功能应用版本的情况。内存使用情况随用户而异,故而将应用内存使用足迹以曲线形式显示,如果两种情况下内存足迹曲线出现,则表示可能存在内存回归情况,如下图表示:



一个有趣的发现是,内存泄漏只影响一小部分用户。因此,除了百分比较高的部分(取决于用户群组大小),内存足迹曲线实际是会几乎重合的。如下图中所示,内存泄漏只会发生在极特殊的情况下,仅影响用户群组的最后一段百分比。



Lyft 的工程师称,这种方式已被证明可以有效检测内存泄漏,尤其是特殊情况下极易在本地测试时遗漏的内存泄露。还请不要错过 Lyft 原文中的全部细节。


原文链接

How Lyft Detects Android Memory Leaks in Production


相关阅读:

探索 Android 14:首个开发者预览版的新功能与特性

Spotify 移动工程平台迁移:将 Android 和 iOS 代码库迁移到 Bazel

2023-03-22 08:006916

评论

发布
暂无评论
发现更多内容

从项目制到产品制,日子变美好了吗?

刘华Kenneth

DevOps 敏捷 软件项目

“程”风破浪的开发者|我的Docker学习小妙招

学习方法 “程”风破浪的开发者

“程”风破浪的开发者|我的数据结构和算法学习小技巧

Albert

学习方法 算法 LeetCode “程”风破浪的开发者

【愚公系列】2022年10月 Go教学课程 037-面向对象综合案例-微博

愚公搬代码

10月月更

教你如何使用华为云的DLV平台搭建无人机飞行轨迹大屏,教科书级别的文章,非常详细

wljslmz

物联网 无人机 数据可视化 10月月更 智慧大屏

技术翻译之我见——标准、实操与收益

刘华Kenneth

翻译 图数据库

“程”风破浪的开发者|元宇宙就是游戏吗?元宇宙的核心价值是什么?

王中阳Go

学习 深度思考 程序员 元宇宙 “程”风破浪的开发者

同情是对他人的不尊重

欧阳娜

离职交接,心态要好

程序人生 职场

嵌入式 Linux 入门(三、Linux Shell 及常用命令说明)

矜辰所致

Linux Shell 10月月更 Shell命令

Linux下安装Anaconda3,这个教程一定要看!

麦洛

Anaconda python 3.5+

直接插入排序算法,看这篇就够了

游坦之

算法 10月月更

两类常见场景下的云原生网关迁移实践

阿里巴巴云原生

阿里云 云原生网关

Java线程池源码深度解析

JAVA旭阳

Java 线程池 10月月更

Vmware虚拟机上CentOS8安装教程

DS小龙哥

10月月更

今年很难被薪资倒挂了!

小小怪下士

Java 程序员

ES6中数组做了哪些新扩展?

CoderBin

JavaScript 面试 前端 ES6 10月月更

架构作业3-外包学生管理系统架构文档

许四多

eBPF深度探索: 高效DNS监控实现

俞凡

ebpf

Excel 文档的写入

梦笔生花

Python Monad Excel数据分析 10月月更

算法题学习---链表反转

桑榆

c++ 算法题 10月月更

Eclipse 2022 如何设置中文汉化 步骤绝对足够详细

Geek_yx5md7

eclipse 汉化教程

docker 的 bridge,container网络模式

忙着长大#

,docker

“程”风破浪的开发者|我的学习方法

张立梵

学习方法 “程”风破浪的开发者

Vue组件入门(十三)作用域插槽

Augus

Vue 10月月更

“程”风破浪的开发者|HTML知识框架整理

默默的成长

Web3.0 “程”风破浪的开发者

Spring Boot「12」自定义 starter

Samson

Java spring 学习笔记 spring-boot 10月月更

运维进阶训练营-W01H

赤色闪电

运维

复盘:一次测试负责人岗位面试总结

老张

面试 质量保障 团队规划

Java线程池submit阻塞获取结果实现原理

JAVA旭阳

Java 线程池 10月月更

【JavaWeb】 Mybatis-01-Mybatis的简介:用对话的方式让你明白为什么要使用Mybatis

游坦之

10月月更

Lyft如何检测生产中安卓的内存泄漏_移动_Sergio De Simone_InfoQ精选文章