Categories
程式開發

Android Camera内存问题剖析


本文通过一类 Android 机型上相机拍摄过程中的 native 内存 OOM 的问题展开,借助内存快照裁剪回捞和 Native 内存监控工具的赋能,来深入剖析此类问题。

背景

Raphael 是西瓜视频 Android 团队开发的一款 native 内存监控工具,在字节跳动内部产品(如西瓜、抖音、头条等)上广泛用于监控 native 内存泄漏问题。在抖音 7.8.0-8.3.0 上搜集到大量因虚拟内存触顶而 crash 的内存日志现场(如 pthread_create、GL error、EGL_BAD_ALLOC),其中 60%以上都是 camera 相关的内存泄漏,占整体 crash 的 15%以上(Java & Native)。同时也收到 OPPO 等厂商反馈抖音 app 在其新机型上 native crash 比其他机型高了 3 倍以上,分析厂商提供的日志发现基本都是虚拟内存触顶导致的 carsh,这其中 80%以上都有 camera 相关的内存分配失败的日志。

问题

通过对 native 内存监控搜集到的日志进行堆栈聚合和 so 级的内存占用统计,可以发现截止到 OOM 时工具拦截到的 native 内存总量已经达到了 1.3G 左右(32 位下应用可直接使用的 native 内存上限约 2G),这其中占比最大的是 CameraMetaData 对象间接引用的内存,native 内存泄漏十分严重。

原文链接:【https://www.infoq.cn/article/mgQKjqOKMWJa46ztUxLo】。未经作者许可,禁止转载。