当前位置:   article > 正文

memory泄露分析方法(native篇)_native memory analysis

native memory analysis

#本文介绍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:
 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/409993
推荐阅读
相关标签
  

闽ICP备14008679号