android应用内存占用测试(每隔一秒打印procrank的信息)

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/xbin/libpagemap.so

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

mount   -o  remount,rw    /system

4.  procrank各项值解析

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

VSS——是单个进程全部可访问的地址空间,其大小包括可能还尚未在内存中驻留的部分。比如地址空间已经被 malloc 分配,但是还没有实际写入;对于确定单个进程实际内存使用大小, VSS 用处不大。

RSS——是单个进程实际占用的内存大小,RSS 易被误导的原因在于, 它包括了该进程所使用的所有共享库的全部内存大小。对于单个共享库,尽管无论多少个进程使用,实际该共享库只会被装入内存一次;因此,对于单个进程的内存使用大小, RSS也不是一个精确的描述。

PSS——不同于RSS的是,PSS按比例包含了其所使用的共享库大小;例如,三个进程使用同一个占用30内存页的共享库。对于三个进程中的任何一个,PSS将只包括其中的10个内存页。PSS是一个非常有用的数字,因为系统中全部进程以整体的方式被统计,对于系统中的整体内存使用是一个很好的描述。如果一个进程被终止,其PSS中所使用的共享库大小将会重新按比例分配给剩下的并且仍在使用该共享库的进程。

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)分析值

时间: 2024-10-17 09:13:53

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

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

Android中内存占用的含义:(VSS,PSS,RSS,USS) 作者: andforce 分类: 安卓系统 发布时间: 2013-09-07 00:03 ?1,915 浏览数 6没有评论 在eng版本的android手机上,可以执行:procrank 会列出来VSS,PSS,RSS,USS的占用信息. VSS:Virtual Set Size:how virtual memory associated witth process.([共享]进程所占的虚拟内存是多少,跟物理内存没有多大关心.)

Docker 内存占用测试

Docker 内存占用测试测试目的:合理设置内存.交换分区.内存预留 测试程序:JDK环境直接复制粘贴即可cat >OutOfMemeber.java<<EOFpackage com.ptmind.datadeck;import java.text.DecimalFormat;import java.util.ArrayList;import java.util.List;public class OutOfMemeber {public static void main(String[

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

转自:http://my.oschina.net/shaorongjie/blog/105354 可以使用adb shell showmap pid查看一个进程的showmap,这对于我们来说非常有用,可以确定进程中哪些库占用内存比较多. virtual size, RSS,PSS可以参考 http://blog.csdn.net/adaptiver/article/details/7084364 Shared_Clean和其他进程共享的未改写页面: Shared_Dirty和其他进程共享的已改

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

Integer a = 1; long start = 0; long end = 0; // 先垃圾回收 System.gc(); start = Runtime.getRuntime().freeMemory(); HashMap map = new HashMap(); for (int i = 0; i < 1000000; i++) { map.put(i, a); } // 快要计算的时,再清理一次 System.gc(); end = Runtime.getRuntime().fr

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

这篇博客主要介绍 linux 环境下,查看内存占用的两种方式:使用 ps,top等命令:查看/proc/[pid]/下的文件.文章简要介绍了命令的使用方法与一些参数意义,同时对/proc/[pid]/下的文件内容进行了一些详细的介绍.文章内容来自google和自我总结,如有不当之处,欢迎批评指正. 查看Linux内存的方法 linux 下面查看内存有多种渠道,比如通过命令 ps ,top,free, pmap 等,或者通过/proc系统.一般情况下,ps,top,pmap,free可以满足要求,

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

从上一篇文章<Android屏幕适配全攻略>写完之后,经常会有朋友问我这个问题:"能不能一个App只提供一套切图适应所有的分辨率呢?"我觉得有必要写一篇文章来研究一下这个问题,所以就有了这篇文章. 研究内容 研究方法 测试环境 研究过程 结果分析 结论 另外一个难以解释的问题 研究内容 本篇内容主要探讨以下场景:同一张图片,放置在不同的drawable文件夹,在同一设备上运行,对图片大小及内存占用有什么影响. 研究方法 控制变量法 分析法 测试环境 采用锤子T1手机(108

[Android Pro] Android应用性能测试之CPU和内存占用(转载)

首先稍做分析一下测试环境:我们知道CPU和内存占用是一个实时变化的状态,而市面上还没有具体的哪款android应用能做到实时监控CPU和内存占用并使用log日志保存.考虑到android的底层框架是基于Linux的平台,所有我们可以通过Linux的资源监控命令来实现对android平台的资源实时监控. 要做到上边的测试环境的实现,需要具备以下几点: 1.被测试的手机具备root权限:因为涉及到底层的linux命令,需要读取或执行相应的文件.至于如何root你的手机,不同型号的手机root的方法不

Android 内存泄露测试数据处理--procrank,setprop,getprop(转)

1.Android内存测试常用的几个概念. VSS--virtual set size 虚拟耗用内存(包含共享库占用的内存)RSS--Resident set size实际使用的物理内存(包含共享库占用的内存)PSS--Proportional set size 实际使用的物理内存(比例分配共享库占用的内存)USS--Unique Set size:进程独自占用的物理内存(不包含共享库占用的内存)一般来说内存占用大小如下规律:VSS>=RSS>=Pss>=USS 2.Android pr

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

最近发现自己学的很多东西没有做好积淀的工作,也萌生了写一些东西的念头.本人也没有写博客的习惯,下边就写一下手机端的性能测试. 最近公司,要我们从事对竞品的性能测试,我负责CPU和内存的性能测试,下面就和大家来分享一下android应用程序的CPU和内存的性能测试. 首先稍做分析一下测试环境:我们知道CPU和内存占用是一个实时变化的状态,而市面上还没有具体的哪款android应用能做到实时监控CPU和内存占用并使用log日志保存.考虑到android的底层框架是基于Linux的平台,所有我们可以通