打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Android 终端性能测试——内存篇
下面主要总结一下Android性能测试中常用的方法及解释

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

Android 2.0开始,在Settings中加入了一个新的activity"Running Services" activity),它用于显示当前运行的每个Services进程的内存使用情况及整个手机的内存大致使用情况。可以通过Setting->Applications->Runningservices进入该activity

使用该方法需要注意,一些应用程序可能有几个进程,但是在这里只显示了其中的某个进程。比如微信,在Runningservices activity只能看到子进程com.tencent.mm:push的内存信息,所以,这个统计有时候是不可靠的。

 

二:常用的shell命令获取:

1.     Procrank命令Procrank可以同时获得以下几种内存的信息:

l VSSVirtual Set Size虚拟耗用内存(包含共享库占用的内存)。This sizealso includes memory that may not be resident in RAM like mallocs that havebeen allocated but not written to,所以用VSS来衡量一个进程实际使用的内存意义不大。

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

l PSS - Proportional Set Size实际使用的物理内存(比例分配共享库占用的内存)。 PSS is a very usefulnumber 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衡量程序占用的内存误差比较小。

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

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

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

 

2.    Top命令

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

3.    Ps命令

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

4.    dumpsysmeminfo

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

下图是查看pid767的应用内存信息截图。

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

size总内存大小(kb)。

Allocated表示的是已使用了的内存大小(kb),

Free:表示的是剩余的内存大小(kb

PrivateDirty:非共享的,又不能换页出去(can not be paged todisk )的内存的大小。和USS相似,但是实际实践中,发现他们还是有细微的差别,现在还没有搞明白。

SharedDirty参照PrivateDirty我认为它应该是指共享的,又不能换页出去(can not be paged todisk )的内存的大小。比如Linux为了提高分配内存速度而缓冲的小对象,即使所有共享它的进程结束,该内存也不会释放掉,它只是又重新回到缓冲中而已。

5.    adb shellcat /proc/meminfo

该方式只能得出系统整个内存的大概使用情况。

MemTotal :可供系统和用户使用的总内存大小 (它比实际的物理内存要小,因为还有些内存要用于radio, DMAbuffers,). 

MemFree:剩余的可用内存大小。这里该值比较大,实际上一般Androidsystem的该值通常都很小,因为我们尽量让进程都保持运行,这样会耗掉大量内存。

Cached系统用于文件缓冲等的内存.通常systems需要20MB以避免bad paging states

6.    cat/proc/$pid/status

以下是进程ID767的应用程序的
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Linux内存工具解析之RSS/VSS/USS/PSS区别于联系
Android内存之VSS/RSS/PSS/USS
Android App定位和规避内存泄露方法研究
Android内存分析和调优(上)
win/linux 下使用 psutil 获取进程 CPU / memory / IO 占用信息
使用 adb 获取 Android 性能数据
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服