最近一直在研究monkey测试。网上资料很多,但都是一个抄一个的。原创的很少
我把检查app内存泄漏的情况梳理一下:
参考资料:
首先基础的monkey测试,之前讲过。参照以前文档
在monkey测试的同时我们需要关注的一个点。
内存检测用批处理脚本记录,约5秒记录一次:
脚本如下,保存为bat文件
@echo off &color 0a&setlocal enabledelayedexpansion&title %~n0
::@mode con lines=18 cols=50
set package1=com.xxxx.xxxxx
adb shell dumpsys meminfo %package1% | findstr "Pss" > ./info_1.txt
:start
adb shell dumpsys meminfo %package1% | findstr "TOTAL" >> ./info_1.txt
echo.
echo.
ping -n 5 127.1>nul
goto start
我们先可以看一下基础的命令,查看应用内存的命令:adb shell dumpsys meminfo (进程名)
这里得到的信息非常多,重点关注如下几个字段:
(1) Native/Dalvik 的 Heap 信息
具体在上面的第一行和第二行,它分别给出的是JNI层和Java层的内存分配情况,如果发现这个值一直增长,则代表程序可能出现了内存泄漏。
(2) Total 的 PSS 信息
这个值就是你的应用真正占据的内存大小,通过这个信息,你可以轻松判别手机中哪些程序占内存比较大了。
所以我们运行上面的bat文件。得到的数据是这样的:
右边三列,如果执行了用户事件流10万次后,发现数值一直在增长,那么很有可能是内存泄漏了。
左边第一列,表示app占据内存的大小,比如开四个app程序同时,我们可以比较哪个程序最占用内存,就是通过这个数据!
bat脚本为
@echo off &color 0a&setlocal enabledelayedexpansion&title %~n0 ::@mode con lines=18 cols=50 set package1=com.xxxx.xxxxx adb shell top -n 1 | findstr "PID" > ./cupInfo_1.txt :start adb shell top -n 1 | findstr %package1% >> ./cupInfo_1.txt echo. echo. ping -n 5 127.1>nul goto start
用到的是adb shell top 命令参考文档:http://blog.csdn.net/kittyboy0001/article/details/38562515
PID 进程id PR 优先级 CPU% 当前瞬时CPU占用率 S 进程状态:D=不可中断的睡眠状态, R=运行, S=睡眠, T=跟踪/停止, Z=僵尸进程 #THR 程序当前所用的线程数 VSS Virtual Set Size 虚拟耗用内存(包含共享库占用的内存) RSS Resident Set Size 实际使用物理内存(包含共享库占用的内存) PCY 调度策略优先级,SP_BACKGROUND/SP_FOREGROUND UID 进程所有者的用户id Name 进程的名称