先说背景,我们的应用是安卓 Native 进程应用,近期发现一个 OOM 问题,出现问题时我们进程的 Rss 占用高达 4 个 G ,本身总共就只有 6G 内存,由此得出我们进程发生了内存泄漏,再多的信息就没有了。
仔细检查了代码,涉及到内存的地方大部分都是 static 静态变量,也没有重复 new ,重复 malloc 够不 free 的地方,基本都是常驻内存。除了我们应用代码本身,还有一些开源的第三方库以及安卓系统的标准库,这部分有没有问题无法排查。
网上查了很多,都没有查到能在程序运行期间排查内存泄漏的方法。从 Google 官方文档里就找到一个 libmemeunreachable 的 so 库,这个库本身是被 zygote 加载的,可以通过 adb 命令查看安卓 app (java)的内存情况,但是 C++层却只有通过接口调用的方式进行检测,这又涉及到改代码,总之就是很麻烦。
想问一下各位,有没有好的办法对这个问题进行诊断,最好是能够定位到内存异常增加的是哪个 so 库或者哪个 bin 文件,谢谢各位了
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
https://www.v2ex.com/t/835373
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.