V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
FranzKafka95
V2EX  ›  问与答

求助安卓开发的大佬们, Native 应用进程内存泄露如何排查

  •  
  •   FranzKafka95 · 2022-02-21 12:26:55 +08:00 via Android · 1438 次点击
    这是一个创建于 1002 天前的主题,其中的信息可能已经有所发展或是发生改变。
    先说背景,我们的应用是安卓 Native 进程应用,近期发现一个 OOM 问题,出现问题时我们进程的 Rss 占用高达 4 个 G ,本身总共就只有 6G 内存,由此得出我们进程发生了内存泄漏,再多的信息就没有了。

    仔细检查了代码,涉及到内存的地方大部分都是 static 静态变量,也没有重复 new ,重复 malloc 够不 free 的地方,基本都是常驻内存。除了我们应用代码本身,还有一些开源的第三方库以及安卓系统的标准库,这部分有没有问题无法排查。

    网上查了很多,都没有查到能在程序运行期间排查内存泄漏的方法。从 Google 官方文档里就找到一个 libmemeunreachable 的 so 库,这个库本身是被 zygote 加载的,可以通过 adb 命令查看安卓 app (java)的内存情况,但是 C++层却只有通过接口调用的方式进行检测,这又涉及到改代码,总之就是很麻烦。

    想问一下各位,有没有好的办法对这个问题进行诊断,最好是能够定位到内存异常增加的是哪个 so 库或者哪个 bin 文件,谢谢各位了
    9 条回复    2022-02-23 22:07:13 +08:00
    rrZ2C
        1
    rrZ2C  
       2022-02-21 12:28:52 +08:00
    经分析 xx,建议转系统接力,谢谢![二哈]
    FranzKafka95
        2
    FranzKafka95  
    OP
       2022-02-21 12:34:33 +08:00 via Android
    @rrZ2C 锅是甩不掉的,已经从 Oom 的日志里看到我们进程 Rss 异常了,只能硬着头皮上
    des
        3
    des  
       2022-02-21 12:34:59 +08:00 via iPhone
    root 了之后 dump 内存,用 Linux 那套
    FranzKafka95
        4
    FranzKafka95  
    OP
       2022-02-21 12:39:14 +08:00 via Android
    @des dumpsys meminfo 是吧,可是这也只能看到有异常,没办法帮忙定位到程序的哪个部分
    john6lq
        5
    john6lq  
       2022-02-21 13:23:03 +08:00 via iPhone
    先在应用侧确定是哪个页面总行吧
    wuruxu
        6
    wuruxu  
       2022-02-21 15:25:13 +08:00
    可能是第三方库调用流程有问题,导致内存泄漏,假如容易重现,还比较好处理
    pursuer
        7
    pursuer  
       2022-02-21 19:01:17 +08:00
    前几天我在某杂牌机上装的支付宝倒是会卡住,ps 看了下好像是内存用挺多的。不过我觉得大概是杂牌机系统魔改的问题所以没管(又不是不能用。

    不知道可不可以 hook 住内存申请释放的函数 malloc mmap 啥的去查。
    itsMelo
        8
    itsMelo  
       2022-02-21 22:21:00 +08:00 via Android
    你们有什么场景下会申请 native 内存吗?
    FranzKafka95
        9
    FranzKafka95  
    OP
       2022-02-23 22:07:13 +08:00 via Android   ❤️ 1
    过了两天,我来自己回帖了,目前终于是有了方向并且找到问题了,附上本次排查的一些心得,希望对大家有帮助 https://coderfan.net/android-native-memory-leak-debug.html
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2602 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 15:50 · PVG 23:50 · LAX 07:50 · JFK 10:50
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.