国内最全IT社区平台 联系我们 | 收藏本站
华晨云阿里云优惠2
您当前位置:首页 > php开源 > 综合技术 > Android内存泄露分析简要思路

Android内存泄露分析简要思路

来源:程序员人生   发布时间:2015-04-15 08:38:55 阅读次数:5394次


工作中遇到挺多需要分析内存泄漏问题的情况,现在大致扼要写下思路,等以后时间相对照较充裕再进行补充。


1.明白内存泄漏的判断根据?

个人总结为:延续增加,只增不减!

理解1下这8个字,配合几个命令和工具来肯定1下你的利用是不是存在内存泄漏问题,这是很关键的,如果1开始就判断毛病了,那末没有继续往下进行的理由。

命令以下: 

adb shell

dumpsys meminfo 利用包名 [固然,比较粗略地话,可以用adb shell procrank]

这时候候你可以看到1个内存使用情况表



而我们首先关注的是TOTAL这个值,比方你会履行某个脚本,或Monkey在不断操作你的利用,你可以隔半个小时视察1次TOTAL的情况,如果延续增加,那末10有89是有内存泄漏的问题了,但是也其实不是绝对,这时候候你就要配合上DDMS工具来做分析了。(DDMS里面有1项Heap,里面可以Cause GC,如果你发现你履行了GC以后,照旧内存没有甚么太大的减少,那末恭喜你,这部份内存泄漏了。)


2.根据第1步所论述的1个情况,大概可以判断出是不是有内存泄漏,那末接着需要做甚么呢?

如果内存泄漏,那末我们该做些甚么呢?

思路:一定我们想要找到泄漏点,那末如何找到?


(1). 你需要抓取hprof文件,这个文件可以显现出1些内存的使用情况,不过切记,你别清除进程再来抓这个文件,然后配合着MAT把这个hprof文件分析了

(MAT分析hprof文件的这方面知识网上太齐全了,读者们可以自己去学习1下哈,这里就不累坠)


(2).如果MAT分析出来的东东,你实在看不出甚么猫腻,那末再次恭喜你,你中大招了。

这时候候你要继续视察dumpsys meminfo 包名, 输出的结果信息,关注点放在 UnKnown那1行 和 Native Heap 那1行,关注Heap Alloc 或 Pss Total, 

如果你的总TOTAL1直再增加,但是是由于这两行的增加,那末这个问题你不需要再继续在MAT上花时间了,由于这类内存泄漏问题,出在Native层(C)

那末你需要去找你程序中使用到JNI的地方,so库或其他1些特殊调用上,分析它们是不是可能造成内存泄漏问题。


(3)固然兴许你照旧没有头绪,那末没关系,另外一个命令就是为了你而存在的,(首先某个利用的PID号, 用dumpsys meminfo 包名,那边已可以查到)

比方我上面那个mms, PID号为2786, 接着adb shell showmap -a PID号 (adb shell showmap -a 2786)

然后根据结果[....]这的信息,在去google上面找关键字, 比方:[ anon ] bash的堆


(4)当你终究还是不知道是由哪边的.so库引发的话,你可以查看下Native Heap的内存分配情况,这时候候你照旧需要借助DDMS,

需要先履行以下命令:

adb shell setprop libc.debug.malloc 1

adb shell stop

adb shell start


然后你还需要改1下eclipse中的配置参数值【由于如果你不配置的话,你的DDMS打开默许是看不到Native Heap那个Tab项的】

在ddms.cfg文件(实在找不到的话,就用Everything搜索下吧)最后增加1行native=true并save。ddms.cfg位于c:Usersxxx.android目录下。

在Device当选择好你要的利用的包名项,然后按下Snapshot按钮, 就能够视察到Native Heap的使用情况了,然后反复履行脚本,再视察视察,你会找到你需要的东西的。


(5)内存泄漏的问题可能很复杂,但是有的时候有了这些技能,相对更重要。所以第(5)小点,额外再提供1些其他的命令技能,帮助查找另外的情况出现内存泄漏的问题。

1.  adb shell dumpsys activity    查询activity栈的情况(曾遇到过,就是activity1直堆积,致使的内存溢出OOM)

        2.  adb shell dumpsys cpuinfo

        3.  adb shell dumpsys battery

 

如果你在这方面有自己其他的1些方法,那末也无妨留言跟大家分享下!


转载请注明:http://blog.csdn.net/ljphhj/article/details/44966023

转载于 胖虎 CSDN



生活不易,码农辛苦
如果您觉得本网站对您的学习有所帮助,可以手机扫描二维码进行捐赠
程序员人生
------分隔线----------------------------
分享到:
------分隔线----------------------------
关闭
程序员人生