写点什么

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

评论

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

数字技术推动乡村振兴,腾讯云助力上线大通农文旅融合数字化平台

科技热闻

软件测试 | 测试开发 | 同样是断言,为何 Hamcrest 如此优秀?

测吧(北京)科技有限公司

测试

软件测试 | 测试开发 | 后端Web开发框架(Java)

测吧(北京)科技有限公司

测试

软件测试 | 测试开发 | 大话JMeter4|不同的并发数可以自动化做压测吗?

测吧(北京)科技有限公司

测试

[SpringMVC]bean加载控制

十八岁讨厌编程

spring 后端开发 9月月更

【JavaScript】巩固JS开发中十个常用功能/案例(11-20)

海底烧烤店ai

算法 前端 JavaScrip 9月月更

软件测试 | 测试开发 | JMeter 典型电商场景(下单/支付)的性能压测

测吧(北京)科技有限公司

测试

软件测试 | 测试开发 | 专项测试实战 | 如何测试 App 流畅度(基于 FPS 和丢帧率)?

测吧(北京)科技有限公司

测试

软件测试 | 测试开发 | 代码分析体系及Sonarqube平台

测吧(北京)科技有限公司

测试

软件测试 | 测试开发 | REST Assured 实践(二):断言实现

测吧(北京)科技有限公司

测试

软件测试 | 测试开发 | 只需搞定Docker,环境问题再也不是测开路上的『坑』

测吧(北京)科技有限公司

测试

软件测试 | 测试开发 | 持续交付-Jenkinsfile 语法

测吧(北京)科技有限公司

一起瓜分20万奖金【第三届火焰杯软件测试大赛开始公开选拔】

测试人

软件测试 自动化测试 接口测试 测试开发 比赛

软件测试 | 测试开发 | 如何确保API 的稳定性与正确性?你只需要这一招

测吧(北京)科技有限公司

测试

深入浅出带你走进 RocksDB

KaiwuDB

数据库 RocksDB

软件测试 | 测试开发 | 代码质量管理平台实战| SonarQube 安装、配置及 JaCoCo、Maven 集成

测吧(北京)科技有限公司

测试

软件测试 | 测试开发 | Docker+Jmeter+InfluxDB+Grafana 搭建性能监控平台

测吧(北京)科技有限公司

测试

软件测试 | 测试开发 |H5性能分析实战来啦~

测吧(北京)科技有限公司

测试

软件测试 | 测试开发 | TestNG 与 Junit 对比,测试框架如何选择?

测吧(北京)科技有限公司

测试

开发者有话说|前路有光,初心莫忘,从编程小白,到如今小有所成,我这一路是如何走来的?

浅羽技术

个人成长 经验分享 自学java 开发者有话说 职场妙招

软件测试 | 测试开发 | 大话测试数据(一)

测吧(北京)科技有限公司

测试

软件测试 | 测试开发 | 学习Docker就应该掌握的dockerfile语法与指令

测吧(北京)科技有限公司

测试

软件测试 | 测试开发 | 电商业务性能测试(二): Jmeter 参数化功能实现注册登录的数据驱动

测吧(北京)科技有限公司

测试

软件测试 | 测试开发 | JavaScript脚本注入,完成Selenium 无法做到的那些事

测吧(北京)科技有限公司

测试

软件测试 | 测试开发 | 云架构系统如何做性能分析?

测吧(北京)科技有限公司

测试

深入探索Linux零拷贝原理

C++后台开发

后台开发 零拷贝 linux开发 Linux服务器开发 C++开发

软件测试 | 测试开发 | Java 接口自动化测试首选方案:REST Assured 实践 (一)

测吧(北京)科技有限公司

测试

软件测试 | 测试开发 | 如何做好性能压测(一):压测环境的设计和搭建

测吧(北京)科技有限公司

测试

基于RESTful页面数据交互案例

十八岁讨厌编程

RESTful 后端开发 9月月更

嗨,程序员,你知道高级工程师用的搜索引擎吗?

梦想橡皮擦

9月月更

软件测试 | 测试开发 | 接口自动化测试框架 RESTAssured 实践(三):对 Response 结果导出

测吧(北京)科技有限公司

测试

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