Android应用性能测试

标签: android 应用 性能 | 发表时间:2014-06-07 13:34 | 作者:wirelessqa
出处:http://blog.csdn.net

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

关于作者:

作者: 毕小朋 | 老 毕 邮箱:  wirelessqa.me@gmail.com

微博:  @WirelessQA 博客:  http://blog.csdn.net/wirelessqa


作者:wirelessqa 发表于2014-6-7 13:34:58 原文链接
阅读:0 评论:0 查看评论

相关 [android 应用 性能] 推荐:

Android应用性能 分析

- - CSDN博客推荐文章
  其实主要是内存方面,内存管理是个永恒的话题. 1.从工具DDMS中,在Sysinfo的tab栏里面有一个Memory usage的选项,通过USB连接Android设备以后很容易抓到图. 在图中可以看到系统随时可以用的内存是Free和Buffers两项,因为我抓图的系统只有128M的内存,所以看上去这部分可用内存已经很少了.

Android应用性能测试

- - CSDN博客推荐文章
java虚拟机有内存使用上限的限制. adb shell进入手机,这此参数被纪录在/system/build.prop中,如果想直接查看可以使用adb shell getprop. 单个应用程序最大内存限制,超过这个值会产生OOM. 单个java虚拟机最大的内存限制,超过这个值会产生OOM. android程序内存一般限制在16M,当然也有24M的,而android程序内存被分为2部分:.

基于 PhoneGap 与 Java 开发的 Android 应用的性能对比

- jinn - 搜索研发部官方博客
        此次的调研的重点是针对一个Android应用的基础需求,用phonegap与Java实现的应用在性能及开发成本等方面的对比.        开发一个应用的最基本需求应该是浏览性需求,而在Android开发中ListView比较常用的控件,广泛被用于数据列表的展现上,而且也比较灵活. 所以本次选择用phonegap和Java各自实现一个ListView的内容展现功能的应用;同时引入另外一个常用组件GridView来实现图片浏览的功能应用.

Android应用程序运行的性能设计

- - CSDN博客推荐文章
Android应用程序运行的移动设备受限于其运算能力,存储空间,及电池续航. 电池续航可能是一个促使你优化程序的原因,即使他看起来已经运行的足够快了. 由于续航对用户的重要性,当电量耗损陡增时,意味这用户迟早会发现是由于你的程序.   虽然这份文档主要包含着细微的优化,但这些绝不能成为你软件成败的关键.

Android应用开发性能优化完全分析

- - CSDN博客推荐文章
其实有点不想写这篇文章的,但是又想写,有些矛盾. 当然了,本文不会就此编辑这么一次,因为技术在发展,工具在强大(写着写着Android Studio 1.4版本都推送了),自己的经验也在增加,所以本文自然不会覆盖所有性能优化及分析;解决的办法就是该文章会长期维护更新,同时在评论区欢迎你关于性能优化点子的探讨.

GetEd2k (Android应用)

- 某牢 - eMule Fans 电骡爱好者
GetEd2k是一个Android应用程序,作者是anacletus. 此应用可以帮助你把网页中的电驴(eDonkey) 链接添加到你个人电脑的电驴客户端里,不过前提是你的客户端开启了用于远程控制的Web interface(Web服务器,网页接口,Web界面),当然,eMule(电骡), MLDonkey 和 aMule 都支持该功能,所以这三种主流电驴客户端的用户都可以使用GetEd2k.

Android 性能优化

- - CSDN博客综合推荐文章
如果应用程序需要使用Service来执行后台任务的话,只有当任务正在执行的时候才应该让Service运行起来. 当启动一个Service时,系统会倾向于将这个Service所依赖的进程进行保留,系统可以在LRUcache当中缓存的进程数量也会减少,导致切换程序的时候耗费更多性能. 我们可以使用IntentService,当后台任务执行结束后会自动停止,避免了Service的内存泄漏.

Android 应用程序

- - CSDN博客推荐文章
Android 应用程序由四个模块构造而成:Activity、Intent 、Content Provider 、Service. 下面简单介绍一下如下模块的含义:. 1、Activity  "活动". 一个Activity就是单独的屏幕,每一个活动都被实现为一个独立的类,并且从活动基类中继承而来,活动类将会显示由视图控件组成的用户接口并对事件作出响应.

android应用框架

- - CSDN博客移动开发推荐文章
原文地址:http://developer.android.com/guide/components/fundamentals.html. android应用程序一旦装进设备,每个程序会在它自己安全的沙盒里运行. 1.android操作系统是一个多用户linux系统,每一个应用程序是一个用户. 2.默认情况下,系统会为每个app分配唯一的linux用户id(这个id只会被系统使用,并且只会被这个app知道),系统为每个app的所有文件都设置了权限,只有被分配了这个app用户ID的程序可以访问它.

Android 性能核心揭密

- - CSDN博客推荐文章
其实我发现不少人不注重性能的开发,这样产品体验会很差的. 移动互联网是用户体验为王的时代,而排在影响用户体验的问题如快速、流畅、省电等,都与研发优化直接相关. 推荐使用traceview和monkey等工具来测试应用,利用layoutopt和ninepatch等工具优化视图,建议开发者注重代码复用,做好应用分析最大化利用第三方工具.