Lyft如何在生产环境中检测Android内存泄漏

Lyft工程师通过A/B测试和内存可观测性检测Android内存泄漏

Lyft工程师结合A/B测试和内存可观测性技术,确保在发布大型复杂功能时不会引入内存使用方面的退步。这一方法特别适用于包含原生C/C++代码的功能,因为这些代码更容易引发内存泄漏。

总体方法

Lyft工程师通过以下步骤检测内存泄漏:

  1. 测量标准版本应用的内存行为作为基线。
  2. 在A/B测试中,将特定功能的用户子集收集的内存数据与基线进行比较。

内存指标选择

Lyft工程师考虑了Android提供的多种内存使用指标:

  • 比例集大小(PSS)
  • 唯一集大小(USS)
  • 驻留内存大小(RSS)

最终选择RSS,因为它性能良好且没有采样率限制。此外,工程师还关注JVM堆和本地堆大小,这些指标由Android运行时直接支持。

数据收集场景

内存指标在以下两种场景下收集:

  1. 每次UI屏幕关闭时。
  2. 每隔1分钟,以应对用户长时间停留在同一UI屏幕的情况。

内存回归检测

通过比较标准版本和启用特定功能版本的内存行为曲线,Lyft工程师可以判断是否存在内存回归。如果两条曲线存在显著差异,则可能存在内存泄漏。

特殊情况:影响少数用户的内存泄漏

如果内存泄漏仅影响少数用户,内存曲线在高百分位数部分会有所不同。例如,只影响最后百分之一的用户时,曲线会在最高百分位数部分出现差异。

结论

Lyft工程师的方法有效检测了在特定情况下发生的内存泄漏,这些情况在本地测试中容易被忽略。详细内容可参考原文。

阅读 53
0 条评论