memory泄露分析方法(native篇)

本文介绍了Native内存泄露的挑战,探讨了Android平台上的几种工具如Matrix、Raphael、Perfetto和LeakTracer的使用方法,包括它们的原理、适用场景和注意事项。作者还分享了处理内存泄露的技巧和项目中的常见案例分析。
摘要由CSDN通过智能技术生成

#本文介绍native泄露分析方法#

Native泄露非常难以治理,因为系统Native内存可共享的,不像JavaHeap内存是私有的

捕捉泄露:测试每天从monkey中筛选出内存超标的app,

从dumpsys_meminfo_pid看native heap大,我们采用几种工具可以找到泄露调用栈:

  1. Androidstudio:captrue native heap (抓取时长:600s (抓取方式 AndoridStudio分析内存   注意:有的车机系统不稳定:大多数无法抓取,偶尔又可以抓) 适用于实时抓取

  2. perffeto native内存 (抓取时长:60s  适用于实时抓取

  3. raphael (抓取时长:无限制(适用于压测,提前启动raphael

  4. 申请和释放的地方打印日志,日志成对出现才证明没有泄露

上述工具使用方法网上有详细介绍,请大家自行学习,使用时遇到任何疑问可私信我!

技巧:

从trace中没找到原因,不要慌!

下一步:恢复现场,从日志或摄像机记录下这段时间的录像,尝试复现,据经验,如果找到必现路径,100%可找到原因,我们要胸有成竹!

业内各种Native工具的使用情况:

名称原理项目备注

matrix

基于PLT hook,hook malloc和freehttps://github.com/Tencent/matrix https://github.com/iqiyi/xHook/blob/master/docs/overview/android_plt_hook_overview.zh-CN.md

raphael

长时间抓取

https://github.com/bytedance/memory-leak-detector

https://jidudev.com/jian.lang/native-memory-leak-detector/-/tree/master/native-leak-library

Jidu 优化过的raphael:优化点(去掉无用代码,增大cache为1G)

perffeto

无法长时间抓取

perfetto-trace抓取

Androidstudio

无法长时间连续抓取,但比perffeto抓取时间要长

 AndoridStudio分析内存

抓取时长:无限制(抓取方式  https://jidudev.com/jian.lang/native-memory-leak-detector/-/tree/master/native-leak-library  适用于压测,提前启动

各家自研方案

在申请和释放对象的地方把对象加入到全局链表中,或简单一些就在申请,释放的地方打印相同的日志

LeakTracer修改编译、链接流程,再libc链接之前,先链接到LeakTracer额内存分配函数(new、delete、malloc、free)https://github.com/fredericgermain/LeakTracerhttps://github.com/wangshengyang1996/AndroidLeakTracer

  LeakTracer原理如图:

接下来分析下项目中常见的泄露Case:
 

  • 6
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值