- 1、本文档共8页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
1内存泄露
内存泄漏指由于疏忽或错误造成程序未能释放已经不再使用的内存的情况,是应用程序分配某段内存后,由于设计错误,失去了对该段内存的控制,因而造成了内存的浪费。
2预置条件
使用专用user版本,获取root权限(可在网上下载可获得root权限工具如root大师),获取root权限后所做操作不会影响测试结果。
测试前卸载所有非内置的应用,注意在获取root权限后会生成一个授权管理应用不能被卸载。
3内存泄露的检测步骤:
对应用进行压力测试。(非系统进程采用monkeyrunner测试,系统进程采用monkey测试)
进行压力测试时同时使用自动化工具获得进程的内存数据。
压力测试结束后通过命令获取hprof文件。
对获取的内存数据进行处理,绘制进程的Uss曲线图。
通过曲线图判断是否存在内存泄露。
当曲线显示有内存泄露,分析hprof文件,进一步分析是否存在内存泄露。
通过分析hprof文件确定存在内存泄露之后,定位内存泄露。
解决内存泄漏后,再次复测,直至不再出现内存泄露的情况。
流程图如下图所示:
注意:
测试结束后,将获得两个文件,一个是hprof文件,另一个是通过工具获取内存数据procrank.txt文件。
获取的内存数据有四组,分别是:VSS,RSS,PSS,USS, 其中Uss真正表示一个进程运行时正在占有内存大小,处理数据时只对Uss数据进行处理。
hprof文件主要供开发人员准确定位内存泄露。MAT工具是通过分析hprof文件来快速定位内存泄露可疑代码的工具。
4压力测试
使用monkeyrunner测试非系统进程
测试方法为:monkeyrunner 测试脚本
测试开始前,首先安装获取内存数据AutoProcrankActivity.apk,开始获内存数据后开始执行脚本。使用AutoProcrankActivity获取的内存数据文件在sdcard的根目录下,文件名为procrank.txt。
使用monkey测试系统进程
Monkey测试前设置:
1)电脑装上获取内存数据文件的工具memorycheck,打开.
2)先使用命令将状态栏为禁止状态:
设置成功后重启手机,重启后才设置成功。
将设置以及授权管理加入黑名单,防止在monkey测试过程中进入设置将adb断开以及在授权管理中将root权限断开,设置方法如下:创建一个名称为blacklist的txt文档,在文件中输入应用程序的包名,设置和授权管理,则在文件中输入:
com.android.settings com.mgyun.shua.su(不同包名使用回车键分开),再将blacklist.txt的文件放到手机的SD卡根目录下。
设置完成后,输入指令:adb shell monkey --throttle 500 --ignore
-timeouts --ignore-crashes --ignore-security-exceptions --monitor-native-crashes --pkg-blacklist-file /sdcard/blacklist.txt -v -v -v 20000
注意:monkey测试次数视具体情况设,这里先设置为40000次。
Monkey开始后,立即启动memorycheck获取内存数据,生的procrank.txt文件在E:/目录下。
5内存数据文件的处理
获取procrank.txt内存数据文件之后,将数据导入excel表格(图1),将所测试的应用的数据(根据包命来筛选)筛选出来(图2),复制Uss一栏的数据另外一张表格,绘制曲线图(图3)。
图1
图2
图3
注意:在生成曲线图时,先要删除掉内存的单位K后再生成。
6内存泄露的初步判定
如若Uss曲线图一直呈稳定上升趋势,可初步判断为内存泄露(仍需要进一步分析hprof文件才能最后最终确定)如图所示;
非系统进程:信息的USS曲线图
系统进程launcher的USS曲线图
7获得hprof文件
1)测试结束后先生成hprof文件
压力测试结束后通过上图所示的命令生成设置的hprof文件,其中kill -10 18048(这里18048这里是设置进程的进程编号,生成的是设置的hprof,通过命令 adb shell ps 查询所测试的应用进程编号)。
2)取出hprof文件
在手机安装RE管理器(安装好RE管理器后,首先在授权管理中允许root权限),进入目录/data/misc下能查看到之前生成的hpr
文档评论(0)