【ArchSummit】如何通过AIOps推动可量化的业务价值增长和效率提升?>>> 了解详情
写点什么

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:005332

评论

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

前端科普系列(3):CommonJS 不是前端却革命了前端

vivo互联网技术

Java 大前端 脚本

LeetCode680-验证回文字符串 Ⅱ-Easy

书旅

LeetCode

LeetCode1160---拼写单词---Easy

书旅

LeetCode

Python处理Word文件的实用姿势

程一初

Python 自动化 办公

宿舍晚上温度高,那是你没听“鬼故事”

华为云开发者联盟

人工智能 AI 华为云 modelarts

并发神器CSP的前世今生

soolaugust

并发编程 并发 Go 语言

前端科普系列(4):Babel —— 把 ES6 送上天的通天塔

vivo互联网技术

Java 大前端 ES6

从《三体》到“中美科技战”,3分钟理解“网络”D丝为什么要迎娶“算力”白富美

华为云开发者联盟

数据 网络 芯片 算力 三体

Python处理PDF的实用姿势

程一初

Python 自动化 办公

带你全面认识 Linux

简爱W

“深化产教融合·共育数字人才”全国产教融合信息化高峰论坛·江苏站成功举办

InfoQ_967a83c6d0d7

详解责任链模式

大头星

数据库设计

Jayli

数据库

Python1024办公自动化系列

程一初

Python 自动化 办公

Python处理音频文件的实用姿势

程一初

Python 自动化 办公

utf8字符集下的比较规则

Simon

MySQL 字符集

前端科普系列(2):Node.js 换个角度看世界

vivo互联网技术

node.js 大前端

Python处理邮件和机器人的实用姿势

程一初

Python 自动化 办公

代理模式详解

大头星

Python处理PPT文件的实用姿势

程一初

Python 自动化 办公

Python处理图像文件的实用姿势

程一初

Python 自动化 办公

业务架构是什么?

周金根

BIZBOK 业务架构 IT帮 周金根

解读 Reference

浮白

ThreadLocal Reference ReferenceQueue Finalizer WeakHashMap

【程序员自救指南】中关村保洁大叔的一句话竟然帮我转正了

华为云开发者联盟

服务器 数字化 华为云 企业上云 云服务器

JavaScript 测试系列实战(一):使用 Jest 和 Enzyme 测试 React 组件

图雀社区

单元测试 自动化测试 Jest

MySQL从入门到精通

书旅

MySQL 索引

影响音视频延迟的关键因素(三): 传输、渲染

ZEGO即构

buffer API RTC sdk

如何与面试官更好的沟通

escray

学习 面试

Python处理Excel文件的实用姿势

程一初

Python 自动化 办公

MacOS 环境下 Python 访问 MySQL

李绍俊

Python处理视频文件的实用姿势

程一初

Python 自动化 办公

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