Android应用性能測试
Android内存限制
java虚拟机有内存使用上限的限制
adb shell进入手机,这此參数被纪录在/system/build.prop中,假设想直接查看能够使用adb shell getprop
单个应用程序最大内存限制,超过这个值会产生OOM
dalvik.vm.heapgrowthlimit
应用启动后分配的初始内存
dalvik.vm.heapstartsize
单个java虚拟机最大的内存限制,超过这个值会产生OOM
dalvik.vm.heapsize
小米2S的一些内存限制
#查看单个应用程序最大内存限制
bixiaopeng@bixiaopengtekiMacBook-Pro ~$ adb shell getprop|grep heapgrowthlimit
|[dalvik.vm.heapgrowthlimit]: [96m]
#应用启动后分配的初始内存
bixiaopeng@bixiaopengtekiMacBook-Pro ~$ adb shell getprop|grep dalvik.vm.heapstartsize
|[dalvik.vm.heapstartsize]: [8m]
#单个java虚拟机最大的内存限制
bixiaopeng@bixiaopengtekiMacBook-Pro ~$ adb shell getprop|grep dalvik.vm.heapsize
|[dalvik.vm.heapsize]: [384m]
Android内存使用
android程序内存一般限制在16M,当然也有24M的,而android程序内存被分为2部分:
native和dalvik,dalvik就是我们寻常说的java堆,我们创建的对象是在这里面分配的,而bitmap是直接在native上分配的,对于内存的限制是 native+dalvik 不能超过最大限制。
用下面命令能够查看程序的内存使用情况:
adb shell dumpsys meminfo $package_name or $pid //使用程序的包名或者进程id
查看虾米音乐app的内存占用情况
bixiaopeng@bixiaopengtekiMacBook-Pro ~$ adb shell dumpsys meminfo fm.xiami.main
Applications Memory Usage (kB):
Uptime: 71696500 Realtime: 98283758
** MEMINFO in pid 17340 [fm.xiami.main] **
Shared Private Heap Heap Heap
Pss Dirty Dirty Size Alloc Free
------ ------ ------ ------ ------ ------
Native 0 0 0 1976 1577 226
Dalvik 2973 13956 2712 18691 10825 7866
Cursor 0 0 0
Ashmem 0 0 0
Other dev 4 44 0
.so mmap 894 2320 604
.jar mmap 0 0 0
.apk mmap 123 0 0
.ttf mmap 0 0 0
.dex mmap 2716 0 16
Other mmap 204 120 96
Unknown 808 540 804
TOTAL 7722 16980 4232 20667 12402 8092
Objects
Views: 0 ViewRootImpl: 0
AppContexts: 5 Activities: 0
Assets: 3 AssetManagers: 3
Local Binders: 5 Proxy Binders: 13
Death Recipients: 0
OpenSSL Sockets: 0
SQL
MEMORY_USED: 0
PAGECACHE_OVERFLOW: 0 MALLOC_SIZE: 0
当中size是须要的内存,而allocated是分配了的内存,相应的2列各自是native和dalvik,当总数也就是total这一列超过单个程序内存的最大限制时,OOM就非常有可能会出现了。
Shared Private Heap Heap Heap
Pss Dirty Dirty Size Alloc Free
------ ------ ------ ------ ------ ------
Native 0 0 0 1976 1577 226
Dalvik 2973 13956 2712 18691 10825 7866
TOTAL 7722 16980 4232 20667 12402 8092
Cpu使用情况
top命令例如以下:
adb shell
$ top -h
top -h
Usage: top [-m max_procs] [-n iterations] [-d delay] [-s sort_column] [-t] [-h]
-m num Maximum number of processes to display. // 最多显示多少个进程
-n num Updates to show before exiting. // 刷新次数
-d num Seconds to wait between updates. // 刷新间隔时间(默认5秒)
-s col Column to sort by <cpu,vss,rss,thr> // 按哪列排序
-t Show threads instead of processes. // 显示线程信息而不是进程
-h Display this help screen. // 显示帮助文档
$ top -n 1
top -n 1
举个样例:
查看前5个进程cup的使用情况
bixiaopeng@bixiaopengtekiMacBook-Pro ~$ adb shell top -m 5 -s cpu
User 33%, System 8%, IOW 0%, IRQ 0%
User 340 + Nice 2 + Sys 83 + Idle 596 + IOW 6 + IRQ 0 + SIRQ 2 = 1029
PID PR CPU% S #THR VSS RSS PCY UID Name
27256 1 12% S 37 852340K 220296K fg u0_a25 fm.xiami.main
517 0 6% S 100 842940K 118832K fg system system_server
174 0 4% S 13 66532K 14000K fg media /system/bin/mediaserver
27767 0 2% S 11 673928K 50516K bg u0_a58 com.moji.mjweather
171 0 1% S 13 97904K 51964K fg system /system/bin/surfaceflinger
日志说明:
User 35%, System 13%, IOW 0%, IRQ 0% // CPU占用率
User 109 + Nice 0 + Sys 40 + Idle 156 + IOW 0 + IRQ 0 + SIRQ 1 = 306 // CPU使用情况
PID CPU% S #THR VSS RSS PCY UID Name // 进程属性
xx xx% x xx xx xx xx xx xx
CPU占用率:
User 用户进程
System 系统进程
IOW IO等待时间
IRQ 硬中断时间
CPU使用情况(指一个最小时间片内所占时间,单位jiffies。或者指所占进程数):
User 处于用户态的执行时间,不包括优先值为负进程
Nice 优先值为负的进程所占用的CPU时间
Sys 处于核心态的执行时间
Idle 除IO等待时间以外的其他等待时间
IOW IO等待时间
IRQ 硬中断时间
SIRQ 软中断时间
进程属性:
PID 进程在系统中的ID
CPU% 当前瞬时所以使用CPU占用率
S 进程的状态,当中S表示休眠,R表示正在执行,Z表示僵死状态,N表示该进程优先值是负数。
#THR 程序当前所用的线程数
VSS Virtual Set Size 虚拟耗用内存(包括共享库占用的内存)
RSS Resident Set Size 实际使用物理内存(包括共享库占用的内存)
PCY OOXX,不知道什么东东
UID 执行当前进程的用户id
Name 程序名称android.process.media
// ps:内存占用大小有例如以下规律:VSS >= RSS >= PSS >= USS
// PSS Proportional Set Size 实际使用的物理内存(比例分配共享库占用的内存)
// USS Unique Set Size 进程独自占用的物理内存(不包括共享库占用的内存)
温馨提示:
我们一般观察Uss来反映一个Process的内存使用情况,Uss 的大小代表了仅仅属于本进程正在使用的内存大小,这些内存在此Process被杀掉之后,会被完整的回收掉,
Vss和Rss对查看某一Process自身内存状况没有什么价值,由于他们包括了共享库的内存使用,而往往共享库的资源占用比重是非常大的,这样就稀释了对Process自身创建内存波动。 而Pss是依照比例将共享内存切割,某一Process对共享内存的占用情况。
so
查看USS和PSS能够使用adb shell procrank,前提是手机须要root
bixiaopeng@bixiaopengtekiMacBook-Pro ~$ adb shell procrank |grep xiami
假设仅仅是查看PSS也能够使用adb shell dumpsys meminfo
bixiaopeng@bixiaopengtekiMacBook-Pro ~$ adb shell dumpsys meminfo fm.xiami.main|grep TOTAL
TOTAL 143070 15312 130020 135179 122279 12667
温馨提示:
在取内存数据前能够前推断一下手机是否root, 假设root了取USS比較好一些,假设没有root取PSS也是能够的。
微信公众帐号: wirelessqa

关于作者:
作者: 毕小朋 | 老 毕 邮箱: wirelessqa.me@gmail.com
Android应用性能測试的更多相关文章
- Android App性能測试
一.内存 1.查看单个应用App最大内存限制 Command:adb shell "getprop|grep heapgrowthlimit" C:\Users\hujiachun ...
- Android性能測试 一些适用于Android Studio的代码审查和性能測试工具
导言: Android应用在CPU占用,内存消耗方面的性能指标是影响产品质量的重要因素,因为QQ管家,360手机助手等应用都提供直观的内存消耗,流量监控功能,致使用户比以往更加关注软件的性能,并以此进 ...
- mongodb3.0 性能測试报告 一
mongodb3.0 性能測试报告 一 mongodb3.0 性能測试报告 二 mongodb3.0 性能測试报告 三 測试环境: 服务器:X86 pcserver 共6台 cpu: 单颗8核 ...
- Window平台搭建Redis分布式缓存集群 (一)server搭建及性能測试
百度定义:Redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对很多其它.包含string(字符串).list(链表).set(集合).zset(sort ...
- mysql主键设置成auto_increment时,进行并发性能測试出现主键反复Duplicate entry 'xxx' for key 'PRIMARY'
mysql主键设置成auto_increment时,进行并发性能測试出现主键反复Duplicate entry 'xxx' for key 'PRIMARY' 解决方法: 在my.cnf的[mysql ...
- 系统吞吐量、TPS(QPS)、用户并发量、性能測试概念和公式
PS:以下是性能測试的主要概念和计算公式,记录下: 一.系统吞度量要素: 一个系统的吞度量(承压能力)与request对CPU的消耗.外部接口.IO等等紧密关联.单个reqeust 对CPU消耗越高, ...
- Linux 性能測试工具
Linux 性能測试工具 linux performance 查看系统配置 查看CPU信息 lscpu Architecture: x86_64 CPU op-mode(s): 32-bit, 64- ...
- android手机安全性測试手段
android手机安全性測试手段 罗列一下自己经常使用的android手机安全性測试攻击手段: 1. fiddler和tcpdump+wireshark抓包分析,模拟改动http请求參数,检验漏洞 2 ...
- LR杂记 - 性能測试指标及经常使用的监控工具
监控指标 性能測试通常须要监控的指标包含: 1.serverLinux(包含CPU.Memory.Load.I/O). 2.数据库:1.Mysql 2.Oracle(缓存命中.索引.单条SQL性能.数 ...
随机推荐
- [Python] heapq简介
[Python] heapq简介 « Lonely Coder [Python] heapq简介 judezhan 发布于 2012 年 8 月 8 日 暂无评论 发表评论 假设你需要维护一个列表,这 ...
- [置顶] 大量相关gis资源网盘打包下载
详细请下载附件 所有资源下载(网盘下载): http://laoheitan.bego.cc arcgis教程: http://www.bego.cc/file/23322579 ENVI教程: ht ...
- jvm调优经验分享
当Java程序申请内存,超出VM可分配内纯的时候,VM首先可能会GC,假设GC完还是不够,或者申请的直接超够VM可能有的,就会抛出内 存溢出异常.从VM规范中我们能够得到,一下几种异常. java.l ...
- J2EE 13规范(4)-JSP
JSP全称(Java Server Page ),也称javaserver页面.看到jsp是否立马想到原先以前学过的asp呢. 一.jsp和asp的比較: JSP(Java Server Page)与 ...
- TR90眼镜_百度百科
TR90眼镜_百度百科 TR90眼镜
- 虚拟机VM10装Mac OS X 10.9.3
近期WWDC放出终极大招--新的编程语言Swift(雨燕),导致一大波程序猿的围观和跃跃欲试.当然了,工欲善其事,必先利其器,所以对于那些没有Mac又想要尝鲜的小伙伴肯定非常为难.可是,请放心,本文教 ...
- Cocos2d-x串算出Size方法
项目需要,根据所输入的字符串,的需要计算串帐户Size. 包代码如下面.只需要传递一个字符串,您可以返回Size: Size ChartDemoScene::calculateFontSize(con ...
- MVC数组模型绑定
ASP.NET MVC数组模型绑定 在ASP.NET MVC中使用Razor语法可以在视图中方便地展示数组,如果要进行数组模型绑定,会遇到索引断裂问题,如下示例: <input type=& ...
- 我在开发网站后得出的asp.Net网站优化总结
原文:我在开发网站后得出的asp.Net网站优化总结 asp.Net网站优化总结: 1.数据库优化: 首先是对查询语句的优化,开发时为了图快可以不考虑,但是后期维护时就必须要优化(比如:你调用代码生成 ...
- android圆角View实现及不同版本号这间的兼容
在做我们自己的APP的时候.为了让APP看起来更加的好看,我们就须要将我们的自己的View做成圆角的,毕竟主流也是将非常多东西做成圆角.和苹果的外观看起来差点儿相同,看起来也还不错. 要将一个View ...