Android記憶體和Cpu效能測試

來源:互聯網
上載者:User

標籤:android   java   使用   art   io   for   

Android記憶體限制
java虛擬機器有記憶體使用量上限的限制

adb shell進入手機,這此參數被紀錄在/system/build.prop中,如果想直接查看可以使用adb shell getprop

單個應用程式最大記憶體限制,超過這個值會產生OOM
dalvik.vm.heapgrowthlimit
應用啟動後分配的初始記憶體
dalvik.vm.heapstartsize
單個java虛擬機器最大的記憶體限制,超過這個值會產生OOM
dalvik.vm.heapsize
小米2S的一些記憶體限制

 

#查看單個應用程式最大記憶體限制
adb shell getprop|grep heapgrowthlimit
|[dalvik.vm.heapgrowthlimit]: [96m]

#應用啟動後分配的初始記憶體
adb shell getprop|grep dalvik.vm.heapstartsize
|[dalvik.vm.heapstartsize]: [8m]

#單個java虛擬機器最大的記憶體限制
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的記憶體佔用情況

 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的使用方式

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

adb shell procrank |grep xiami
如果只是查看PSS也可以使用adb shell dumpsys meminfo

adb shell dumpsys meminfo fm.xiami.main|grep TOTAL
        TOTAL   143070    15312   130020   135179   122279    12667       

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.