《android内存泄露测试方法》由会员分享,可在线阅读,更多相关《android内存泄露测试方法(8页珍藏版)》请在金锄头文库上搜索。
1、1 内存泄露内存泄漏指由于疏忽或错误造成程序未能释放已经不再使用的内存的情况,是应用程序分配某段内存后,由于设计错误,失去了对该段内存的控制,因而造成了内存的浪费。2 预置条件1) 使用专用 user 版本,获取 root 权限(可在网上下载可获得 root 权限工具如 root 大师),获取 root 权限后所做操作不会影响测试结果。2) 测试前卸载所有非内置的应用,注意在获取 root 权限后会生成一个授权管理应用不能被卸载。3 内存泄露的检测步骤:1) 对应用进行压力测试。(非系统进程采用 monkeyrunner 测试,系统进程采用 monkey 测试) 2) 进行压力测试时同时使用自
2、动化工具获得进程的内存数据。3) 压力测试结束后通过命令获取 hprof 文件。4) 对获取的内存数据进行处理,绘制进程的 Uss 曲线图。5) 通过曲线图判断是否存在内存泄露。6) 当曲线显示有内存泄露,分析 hprof 文件,进一步分析是否存在内存泄露。7) 通过分析 hprof 文件确定存在内存泄露之后,定位内存泄露。8) 解决内存泄漏后,再次复测,直至不再出现内存泄露的情况。流程图如下图所示:注意:测试结束后,将获得两个文件,一个是 hprof 文件,另一个是通过工具获取内存数据 procrank.txt 文件。获取的内存数据有四组,分别是:VSS,RSS,PSS ,USS, 其中 U
3、ss 真正表示一个进程运行时正在占有内存大小,处理数据时只对 Uss 数据进行处理。hprof 文件主要供开发人员准确定位内存泄露。MAT 工具是通过分析hprof 文件来 快速定位内存泄露可疑代码的工具。4 压力测试1. 使用 monkeyrunner 测试非系统进程测试方法为:monkeyrunner 测试脚本测试开始前,首先安装获取内存数据 AutoProcrankActivity.apk,开始获内存数据后开始执行脚本。使用 AutoProcrankActivity 获取的内存数据文件在sdcard 的根目录下,文件名为 procrank.txt。2. 使用 monkey 测试系统进程M
4、onkey 测试前设置:1)电脑装上获取内存数据文件的工具 memorycheck,打开.2)先使用命令将状态栏为禁止状态:设置成功后重启手机,重启后才设置成功。3) 将设置以及授权管理加入黑名单,防止在 monkey 测试过程中进入设置将 adb 断开以及在授权管理中将 root 权限断开,设置方法如下:创建一个名称为 blacklist 的 txt 文档,在文件中输入应用程序的包名,设置和授权管理,则在文件中输入:com.android.settings com.mgyun.shua.su(不同包名使用回车键分开),再将 blacklist.txt 的文件放到手机的 SD 卡根目录下。设置
5、完成后,输入指令: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 内存数据文件的处理1. 获取 procr
6、ank.txt 内存数据文件之后,将数据导入 excel 表格(图 1),将所测试的应用的数据(根据包命来筛选)筛选出来(图 2),复制 Uss 一栏的数据另外一张表格,绘制曲线图(图 3)。图 1 图 2 图 3注意:在生成曲线图时,先要删除掉内存的单位 K 后再生成。6 内存泄露的初步判定如若 Uss 曲线图一直呈稳定上升趋势,可初步判断为内存泄露(仍需要进一步分析 hprof 文件才能最后最终确定)如图所示;非系统进程:信息的 USS 曲线图系统进程 launcher 的 USS 曲线图7 获得 hprof 文件1)测试结束后先生成 hprof 文件压力测试结束后通过上图所示的命令生成设
7、置的 hprof 文件,其中 kill -10 18048(这里 18048 这里是设置进程的进程编号,生成的是设置的 hprof,通过命令 adb shell ps 查询所测试的应用进程编号)。2)取出 hprof 文件在手机安装 RE 管理器(安装好 RE 管理器后,首先在授权管理中允许 root 权限),进入目录/data/misc 下能查看到之前生成的 hprof 文件,将文件复制到sdcard,再从 sdcard 中将文件拷出。注意:此时获取的 hprof 文件暂时还不能被 MAT 工具识别,这里需要进行转换:将图库的 hprof 文件转换后放置 e 盘中。3)经过转换后的 hpro
8、f 文件通过 MAT 工具打开工具分析出存在泄露的可疑点,研发人员根据上述信息最终定位泄露点。7 测试过程中注意事项1) 确保测试过程中手机不会关机2) 测试过程中,如果应用终止,将内存数据结果清除后重新再测。因为应用终止后会重新开启另外一个进程,上一个进程的 hprof 文件已经无法获得。3) 压力测试的时间建议在 2 个小时左右,此时 Uss 曲线图已经可以比较明确表示的内存情况了。4) 压力测试结束后,退出应用,不作任何操作让手机静置 10 分钟左右(获取内存数据的工具暂不停止),目的是观察当应用恢复到初始状态时内存是否也恢复到原来的状态。5) 如若曲线略有上升趋势,但趋势并不明显,再复测后再确定是否存在问题。6) 使用 excel 处理数据时,注意某一应用的进程编号是否全部一致,不一致则说明测试过程中进程终止过,随后开启了另一个进程,此时数据无效,需要重新测试。