memleak native

常规操作顺序:

  1. dumpsys meminfo;初步判断内存泄漏信息。但是这个只能处理一般的app内存泄漏。
  2. 对于系统级别的匿名内存泄漏不太准确,此时需要cat  /proc/meminfo 查看系统整体内存情况下;
  3. 在1、2中确认系统内存出现问题了,进一步使用adb shell am dumpheap分析内存,这个工具的使用可以参考:https://blog.csdn.net/cigogo/article/details/90548079(文本分析)和https://blog.csdn.net/yellowcath/article/details/78085419(ddms的可视化UI分析工具)
  4. 内存泄漏一般就是找到高频重复出现的地址偏移和动态库信息
  5. addr2line(gcc编译)llvm-symbolizer工具(clang编译)找到地址偏移量对应的代码

#########################################################

https://www.jianshu.com/p/a644769fe5b6  

后来我查到可以用debug malloc工具调查底层的内存申请和释放(参考https://www.jianshu.com/p/2b43abdd6647 和 https://blog.csdn.net/ritterliu/article/details/52217347)

更新连接:https://blog.csdn.net/yellowcath/article/details/78085419

关于内存查看工具的使用总结:

1. cat  /proc/meminfo     查看系统整体的内存信息

2. showmap [pid]  查看当前进程整体的内存使用情况

3. procmem [pid]  查看进程的内存使用情况;不建议使用这个命令,因为信息太多没有合并;showmap这个命令将相同模块的内存使用合并显示

4. procrank 查看当前系统中的大部分进程内存使用情况

5 dumpsys meminfo  这个命令展示部分进程的PSS信息,最后统计RAM使用量,Total RAM>=Free RAM+ Used RAM:

Free RAM这个值很小,Used RAM和Lost RAM异常大时,初步定位内存异常。Lost RAM这个的值比较特别,单独不可以作为内存泄漏的判断。需要配合/proc/meminfo的MemFree同时观察。

6. /proc/[pid]/目录下的几个关于内存的子文件:

maps文件:显示的信息和procmem是一样的,procmem做了简单的整理

smaps:和maps比较是一个更加详细的内存信息文件,一般maps的信息就可以判断了,这个文件信息太多还没有研究

statm和stat这2个文件目前还没有发现很大的作用需要进一步研究

status:这是一个很重要的文件,关于其总的一些值介绍:
VmPeak:表示历史内存的最高使用量
VmSize:当前内存使用量
上面2个值可以判断程序内存使用是否收敛,如果VmPeak一直增加,VmSize这个值不能及时的减少而是和VmPeak保持一直那么内存泄漏了
VmHWM:       45244 kB
VmRSS:       31164 kB
VmData:       27328 kB
VmStk:         136 kB
VmExe:           8 kB
VmLib:       24408 kB 动态库的内存使用

以上是判断系统发生内存泄漏了。接下就要定位内存泄漏。
一般android中大部分程序都可能运行在java虚拟机上,因此当java的vm heap可以直接使用ddms诊断定位;但是如果是native的内存泄漏了就需要在android系统中开启malloc调试模式,参考上面红色部分启动ddms的native模块查看native的信息。目前在高版本的android上studio直接支持比较方便,但是低版本的android需要按照上https://www.jianshu.com/p/2b43abdd6647 这个链接介绍的很详细。但是目前sdk中找不到ddms了 要调试早期的android找工具吧!早期的sdk/tools/ddms这个程序直执行就可以看到需要的东西了。给一个工具链接https://pan.baidu.com/s/1dvtvwJ99XZRm263-w4jMGA

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值