文档章节

Android 终端性能测试——内存篇

go-skyblue
 go-skyblue
发布于 2014/07/31 14:59
字数 1321
阅读 683
收藏 19

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

前言

做Android QQ性能测试时,内存测试中遇到不少困惑,”各种”内存术语,到底什么意思,怎么获取,这里总结一下。 进行的内存测试主要有两个方面,一,OOM的发现和定位,二,同历史版本或竞品的对比测试。关于oom可以用MAT进行分析,具体分析方法参见susanwu在km上的文章《如何使用Memory_Analyzer分析内存泄漏》。下面主要总结一下Android性能测试中常用的方法及解释

一:running services"查看service进程内存

从Android 2.0开始,在Settings中加入了一个新的activity("Running Services" activity),它用于显示当前运行的每个Services进程的内存使用情况及整个手机的内存大致使用情况。可以通过Setting->Applications->Running services进入该activity。 使用该方法需要注意,一些应用程序可能有几个进程,但是在这里只显示了其中的某个进程。比如微信,在Running services activity只能看到子进程com.tencent.mm:push的内存信息,所以,这个统计有时候是不可靠的。

二:常用的shell命令获取:

###1. Procrank命令,Procrank可以同时获得以下几种内存的信息: VSS:Virtual Set Size虚拟耗用内存(包含共享库占用的内存)。This size also includes memory that may not be resident in RAM like mallocs that have been allocated but not written to,所以用VSS来衡量一个进程实际使用的内存意义不大。

RSS : Resident Set Size实际使用物理内存(包含共享库占用的内存)。 RSS can be misleading, because it reports the total all of the shared libraries that the process uses, even though a shared library is only loaded into memory once regardless of how many processes use,所以用RSS来衡量进程占用的内存信息不是特别准确。

PSS - Proportional Set Size实际使用的物理内存(比例分配共享库占用的内存)。 PSS is a very useful number because when the PSS for all processes in the system are summed together, that is a good representation for the total memory usage in the system,所以用pss衡量程序占用的内存误差比较小。

USS - Unique Set Size进程独自占用的物理内存(不包含共享库占用的内存). USS is an extremely useful number because it indicates the true incremental cost of running a particular process,所以用USS描述进程占用内存的波动和峰值比较有意义。

一般存在以下关系VSS>=RSS>=PSS>=USS。

如果要获得某个进程的内存信息,用procrank是个不错的选择,但是目前很多android系统都不支持这个命令,HTC手机部分原生系统支持,比如g3的2.2.1rom。

2. Top命令

输入命令行adb shell top,输出如下图所示:列出top*进程的cpu和内存占用情况,默认按照cpu占用降序排列。top可以获得进程的VSS和RSS信息,命令持续的监视,所以个人觉得这是一个快速查看进程内存和cpu的好方法。

3. Ps命令

PS命令可以获得应用程序的VSIZE(VSS)和RSS,PS是一个获得的是应用的瞬间状态,不需要退出确认,因此在自动化脚本上比较好用。ps | grep appName直接输出appName进程对应的内存信息。

4. dumpsys meminfo

dumpsys 用来给出手机中所有应用程序的信息,并且也会给出手机的状态。用以下命令可以查看程序的内存使用情况:adb shell dumpsys meminfo $package_name or $pid //使用程序的包名或者进程id

android程序内存被分为2部分:native和dalvik,dalvik就是我们平常说的java堆,我们创建的对象是在这里面分配的,而bitmap是直接在native上分配的,对于内存的限制是native+dalvik不能超过最大限制。android程序内存一般限制在16M和24M

size:总内存大小(kb)。
Allocated:表示的是已使用了的内存大小(kb),
Free:表示的是剩余的内存大小(kb)
PrivateDirty:非共享的,又不能换页出去(can not be paged to disk )的内存的大小。和USS相似,但是实际实践中,发现他们还是有细微的差别,现在还没有搞明白。
SharedDirty:参照PrivateDirty我认为它应该是指共享的,又不能换页出去(can not be paged to disk )的内存的大小。比如Linux为了提高分配内存速度而缓冲的小对象,即使所有共享它的进程结束,该内存也不会释放掉,它只是又重新回到缓冲中而已。

###5. adb shell cat /proc/meminfo 该方式只能得出系统整个内存的大概使用情况。

MemTotal :可供系统和用户使用的总内存大小 (它比实际的物理内存要小,因为还有些内存要用于radio, DMA buffers,等). 
MemFree:剩余的可用内存大小。这里该值比较大,实际上一般Android system的该值通常都很小,因为我们尽量让进程都保持运行,这样会耗掉大量内存。

Cached: 系统用于文件缓冲等的内存.通常systems需要20MB以避免bad paging states。 ###6. cat /proc/$pid/status

本文转载自:http://www.51testing.com/html/68/384668-829959.html

go-skyblue

go-skyblue

粉丝 91
博文 50
码字总数 31921
作品 5
杭州
程序员
私信 提问
有哪些好用的 App 云测试平台? -转载

目前,移动App测试主要指的是下面几部分: 兼容性测试——App对不同手机、操作系统版本的兼容性测试,包括安装、启动、卸载等。 功能测试——遍历应用的每一个角落,查看应用的功能、逻辑是否...

chieei
2016/07/29
1K
0
100%移植阿里云移动测试技术_竟仅需1周?!——移动测试专有云(3)——内容详解

一、自动化测试服务 Android兼容性测试 Android兼容性测试旨在帮助解决Android应用在不同真机机型上的各类兼容性问题,包括 Crash/ANR分析、6项性能分析、UI检测、3个版本的覆盖安装检测等。...

乐乎无趣
2017/11/02
12
0
性能优化之Java(Android)代码优化

最新最准确内容建议直接访问原文:性能优化之Java(Android)代码优化 本文为Android性能优化的第三篇——Java(Android)代码优化。主要介绍Java代码中性能优化方式及网络优化,包括缓存、异步、...

Trinea
2013/08/26
2.6K
1
[译]Android 模拟器:Project Marble 中的改进

原文地址:Android Emulator: Project Marble Improvements 原文作者:Android Developers 译文出自:掘金翻译计划 本文永久链接:github.com/xitu/gold-m… 译者:qiuyuezhong 这是 Androi...

Android_开发者
08/27
0
0
华为终端开放实验室Android P 版本兼容性测试上线

华为终端开放实验室针对Android P Preview 1版本的兼容性测试功能正式上线! 如何测试应用在安卓新版本中是否兼容? 开发者可调用华为终端开放实验室中的Pixel机型进行Android P版本相关兼容...

安卓绿色联盟
2018/03/15
4
0

没有更多内容

加载失败,请刷新页面

加载更多

如何更改iOS应用程序的名称?

我前几天用一个愚蠢的开发代码名称开始了一个iPhone项目,现在我想改变项目的名称,因为它已经接近完成了。 但是我不知道如何使用Xcode来做这件事,尝试在info.plist文件中更改应用程序的名称...

技术盛宴
17分钟前
2
0
关于win10tensorflow的配置(CPU+GPU)

主要内容 CPU篇 GPU篇 【前期准备与注意事项】 环境:window1064位+python36(37)+CUDA9.0+cuDNN7.6+tensorflow_gpu-1.12.0 软件:anaconda+pycharm 硬件:有nvidia显卡的笔记本或台式(非A...

放只虎归个山
26分钟前
1
0
C#中的多行字符串文字

有没有一种简单的方法可以在C#中创建多行字符串文字? 这是我现在所拥有的: string query = "SELECT foo, bar"+ " FROM table"+ " WHERE id = 42"; 我知道PHP有 <<<BLOCKBLOCK; C#是......

javail
33分钟前
3
0
微信支付之小微商户扫盲!支持信用卡,免营业执照!

微信支付商户申请面向线下小微商户开放,符合条件的微信支付服务商可为小微商户发起接入申请。无需营业执照。 小微商户日收款额度为5万元~30万元 。 信用卡支付日限额为1千;月限额1万。 结算...

吴伟祥
今天
4
0
大话SDWebImage(三)-- 图片下载层

四、图片下载层 SDWebImageDownloader是处理图片下载的类 4.1 图片下载步骤 首先介绍下dispatch_barrier,GCD中的dispatch_barrier目的是在并发队列实现串行的效果,创建下载任务SDWebImageD...

aron1992
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部