1.内存占用

对于智能手机而言,内存大小是固定的;因此,如果单个app的内存占用越小,手机上可以安装运行的app就越多;或者说app的内存占用越小,在手机上运行就会越流畅。所以说,内存占用的大小,也是考量app性能的一个重要指标

2.原理说明

对于一个app,我们可以关注它在3种状态下的内存占用情况:

空负荷————app已经在后台运行,但是用户没有使用;

中负荷————app在前台运行,用户进行了少量操作;

满负荷————用户持续频繁大量操作,app接近饱和状态运行。

然而,除了第一种情况,其它两种的主观性很强,不是很容易区分。正常产品测试的时候,只要验证后台运行(5~10分钟为宜)和用户持续频繁大量操作(10~15分钟为宜)这两种情况下就可以了。

这样一来,就变成了如何持续统计并记录app所占内存的问题。Procrank工具可以实现这个功能。

3.procrank的安装

1)下载procrank压缩包,下载地址:http://download.csdn.net/download/yincheng886337/9433538

2)解压,将procrank文件push到手机的  /system/xbin目录下;

命令:adb push procrank /system/xbin

将procmem文件push到手机的  /system/xbin目录下;

命令:adb push procmem /system/xbin

将libpagemap.so文件push到手机的  /system/lib目录下;

命令:adb push libpagemap.so /system/lib

3)进入adb shell,获取root权限,分别给procrank、procmem、libpagemap.so三个文件777权限,如下:

chmod 777 /system/xbin/procrank

chmod 777 /system/xbin/procmem

chmod 777 /system/lib/libpagemap.so

如果push不进三个文件或者修改不了三个文件的权限,那重新挂载一下system,再修改三个文件的权限,如下:

mount   -o  remount,rw    /system

4.  procrank各项值解析

进入adb shell,获取root权限,输入命令:procrank即可,如下图:

VSS - Virtual Set Size 虚拟耗用内存(包含共享库占用的内存)
     RSS - Resident Set Size 实际使用物理内存(包含共享库占用的内存)
     PSS - Proportional Set Size 实际使用的物理内存(比例分配共享库占用的内存)
     USS - Unique Set Size 进程独自占用的物理内存(不包含共享库占用的内存)

VSS和USS对查看某一进程自身的内存状况没什么作用,因为他们包含了共享库的内存使用,而往往共享库的资源占用比重是很大的,这样就稀释了对Process自身创建内存波动。

我们一般观察Uss来反映一个进程的内存使用情况,Uss 的大小代表了只属于本进程正在使用的内存大小,这些内存在此进程被杀掉之后,会被完整的回收掉。

USS是一个非常有用的数字,因为它揭示了运行一个特定进程的真实的内存增量大小,如果进程被终止,USS就是实际被返还给系统的内存大小。USS 是针对某个进程开始有可疑内存泄露的情况,进行检测的最佳数字。

怀疑某个程序有内存泄露可以查看USS值是否一直有增加。

5. 写脚本每隔一秒自动打印procrank的信息

1)首先创建一个cmd.txt文件,写入需要执行的adb shell 命令,如:

2)写python脚本,如下:

import os,sys,time
for i in range(500):
os.popen("adb shell <cmd.txt") #运行cmd.txt中的命令
step1=os.popen("adb pull /data/test/t1.txt F:/100python/log102101.txt") #把生成的t1.txt文件下载到本地
fo = open("log102101.txt", 'r+')
input = fo.read()
fo2 = open("mem.txt", 'r+')
fo2.seek(0, os.SEEK_END) #定位到mem.txt文件尾部
fo2.write(input) #写入t1.txt的内容
fo.close()
fo2.close()
time.sleep(1) #休息一秒,再进入下一个循环,也就是每隔一秒打印一次procrank的信息
print "ok" #运行完毕的标志

注:cmd.txt文件,python脚本,mem.txt都存放在同一目录下

3)运行monkey,同时执行写好的脚本

生成的mem.txt文件如下:

附monkey命令:

adb shell monkey -p com.waboon.test --ignore-crashes --ignore-timeouts --ignore-native-crashes --pct-touch 30 -v -v -v --throttle 200 1000

4)mem.txt文件中第五列的值是USS,将mem.txt文件用notepad打开,再选择第五列的值复制到excel中生成图表,如下:

5)分析USS的值,查看是否有内存泄露。

遇到的问题:运行procrank时提示:

error: only position independent executables (PIE) are supported.

解决方法:下载bypass-pie.zip
下载链接: http://pan.baidu.com/s/1i35O8Wd

解压,把里面的linker文件替换手机 /system/bin里的linker文件

android应用内存占用测试(每隔一秒打印procrank的信息)的更多相关文章

  1. [转]Android中内存占用的含义:(VSS,PSS,RSS,USS)

    Android中内存占用的含义:(VSS,PSS,RSS,USS) 作者: andforce 分类: 安卓系统 发布时间: 2013-09-07 00:03 ė1,915 浏览数 6没有评论 在eng ...

  2. Redis各种数据结构内存占用测试

    启动时:(redis为空) 插入数据量都为100W(100W个key或者list中100W个值,或者1000个key,每个key中1000个值) String Key value # Memory u ...

  3. 使用showmap分析android进程内存占用情况(转载)

    转自:http://my.oschina.net/shaorongjie/blog/105354 可以使用adb shell showmap pid查看一个进程的showmap,这对于我们来说非常有用 ...

  4. Map存储容量及内存占用测试

    Integer a = 1; long start = 0; long end = 0; // 先垃圾回收 System.gc(); start = Runtime.getRuntime().free ...

  5. 性能分析 | Linux 内存占用分析

    这篇博客主要介绍 linux 环境下,查看内存占用的两种方式:使用 ps,top等命令:查看/proc/[pid]/下的文件.文章简要介绍了命令的使用方法与一些参数意义,同时对/proc/[pid]/ ...

  6. 关于Android中图片大小、内存占用与drawable文件夹关系的研究与分析

    原文:关于Android中图片大小.内存占用与drawable文件夹关系的研究与分析 相关: Android drawable微技巧,你所不知道的drawable的那些细节 经常会有朋友问我这个问题: ...

  7. Android应用性能测试之CPU和内存占用

    最近发现自己学的很多东西没有做好积淀的工作,也萌生了写一些东西的念头.本人也没有写博客的习惯,下边就写一下手机端的性能测试. 最近公司,要我们从事对竞品的性能测试,我负责CPU和内存的性能测试,下面就 ...

  8. Android高效内存:让图片占用尽可能少的内存

    Android高效内存:让图片占用尽可能少的内存 一.让你的图片最小化 1.1 大图小图内存使用情况对比 大图:440 * 336    小图:220 * 168 小图的高宽都是大图的1/2--> ...

  9. Android高效内存2:让图片占用尽可能少的内存

    Android高效内存:让图片占用尽可能少的内存 一.让你的图片最小化 1.1 大图小图内存使用情况对比 大图:440 * 336    小图:220 * 168 资源目录:xhdpi 小图的高宽都是 ...

随机推荐

  1. JS网站右下角悬浮视窗可关闭广告

    效果体验:http://hovertree.com/texiao/js/4.htm 网站右下角悬浮视窗可关闭广告代码,可收缩.展开,关闭,内容区可自定义html,兼容IE8+.FireFox.Chro ...

  2. CSS的::selection使用方法

    请选择本页面文本看看:http://hovertree.com/h/bjaf/38hq6y9d.htm CSS改变默认文本选中的颜色的方法 一般情况下在网页里的文本我们用鼠标选中的时候都是蓝色的,这个 ...

  3. React Native之FlexBox介绍和使用

    # 前言 学习本系列内容需要具备一定 HTML 开发基础,没有基础的朋友可以先转至 HTML快速入门(一) 学习 本人接触 React Native 时间并不是特别长,所以对其中的内容和性质了解可能会 ...

  4. 一起来学习android自定义控件3——边缘凹凸的View

    前言 最近做项目的时候遇到一个卡劵的效果,由于自己觉得用图片来做的话可以会出现适配效果不好,再加上自己自定义view方面的知识比较薄弱,所以想试试用自定义View来实现.先看设计图效果 实现分析 上面 ...

  5. android 多线程

    本章讲述在android开发中,多线程的应用.多线程能够处理耗时的操作并优化程序的性能.本章主要介绍知识点,AsyncTask,Java线程池,ThreadPoolExecutor线程池类.本章案例只 ...

  6. [css]我要用css画幅画(五)

    接着之前的[css]我要用css画幅画(四), 这次我给小明和静静增加了对话,用了简单的动画效果. github:https://github.com/bee0060/Css-Paint , 完整代码 ...

  7. PHP中require和include路径问题总结

    1 绝对路径.相对路径和未确定路径 相对路径 相对路径指以.开头的路径,例如 ./a/a.php (相对当前目录) ../common.inc.php (相对上级目录), 绝对路径 绝对路径是以 / ...

  8. ora-01033和ora-12560错误的解决方案

    1.登录pl sql 报01033的错误,如下图: 2.登录cmd中,报12560的错误,如下图: 3.查看服务和注册表都没有问题,如下: 查看服务,已启动,如下图: 运行regedit,进入HKEY ...

  9. [译文]通过ID, TagName, ClassName, Name, CSS selector 得到element

    致谢原文: <http://xahlee.info/js/js_get_elements.html> 通过ID得到element: Document.getElementById(id s ...

  10. Android资源(图片)命名规范

    (转自:http://www.jb51.net/article/38796.htm) 图片命名注意: 1,不能以下划线("_")开头: 2,以数字加下划线("[0-9]_ ...