zoukankan      html  css  js  c++  java
  • 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

    关于作者:

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

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


  • 相关阅读:
    MDaemon运行六年方法
    [转帖]如何将一张图片写入数据库SQL,并能正确在C#网页中显示
    【转】CSS 与 HTML5 响应式图片
    【原】设计稿中字体pt与px之间的转化
    【原】[webkit移动开发笔记]之使用chrome进行手机开发
    【原】[webkit移动开发笔记]之兼容iPhone4和iPhone5的方法
    【原】[webkit移动开发笔记]之空链接是使用javascript:void(0)还是使用#none
    CSS3Ps Photoshop图层特效转CSS3代码
    【原】[webkit移动开发笔记]之CSS3径向渐变
    【转】浏览器加载渲染网页过程解析总结(三)
  • 原文地址:https://www.cnblogs.com/zfyouxi/p/4305135.html
Copyright © 2011-2022 走看看