android應用記憶體佔用測試(每隔一秒列印procrank的資訊)

來源:互聯網
上載者:User

標籤:input   統計   就會   out   產品測試   mount   並且   cmem   end   

1.記憶體佔用

    對於智能手機而言,記憶體大小是固定的;因此,如果單個app的記憶體佔用越小,手機上可以安裝啟動並執行app就越多;或者說app的記憶體佔用越小,在手機上運行就會越流暢。所以說,記憶體佔用的大小,也是考量app效能的一個重要指標

 

2.原理說明

對於一個app,我們可以關注它在3種狀態下的記憶體佔用情況:

空負荷————app已經在後台運行,但是使用者沒有使用;

中負荷————app在前台運行,使用者進行了少量操作;

滿負荷————使用者持續頻繁大量操作,app接近飽和狀態運行。

然而,除了第一種情況,其它兩種的主觀性很強,不是很容易區分。正常產品測試的時候,只要驗證後台運行(5~10分鐘為宜)和使用者持續頻繁大量操作(10~15分鐘為宜)這兩種情況下就可以了。

這樣一來,就變成了如何持續統計並記錄app所佔記憶體的問題。Procrank工具可以實現這個功能。

 

3.procrank的安裝

1)下載procrank壓縮包,:http://download.csdn.net/download/yincheng886337/9433538

2)解壓,將procrank檔案push到手機的  /system/xbin目錄下;   

     命令:adb push procrank /system/xbin

     將procmem檔案push到手機的  /system/xbin目錄下;

     命令:adb push procmem /system/xbin

     將libpagemap.so檔案push到手機的  /system/lib目錄下;

     命令:adb push libpagemap.so /system/lib

3)進入adb shell,擷取root許可權,分別給procrank、procmem、libpagemap.so三個檔案777許可權,如下:

     chmod 777 /system/xbin/procrank

     chmod 777 /system/xbin/procmem

     chmod 777 /system/xbin/libpagemap.so

     如果push不進三個檔案或者修改不了三個檔案的許可權,那重新掛載一下system,再修改三個檔案的許可權,如下:

     mount   -o  remount,rw    /system 

 

4.  procrank各項值解析

     進入adb shell,擷取root許可權,輸入命令:procrank即可,如:

     

    VSS——是單個進程全部可訪問的地址空間,其大小包括可能還尚未在記憶體中駐留的部分。比如地址空間已經被 malloc 分配,但是還沒有實際寫入;對於確定單個進程實際記憶體使用量大小, VSS 用處不大。

     RSS——是單個進程實際佔用的記憶體大小,RSS 易被誤導的原因在於, 它包括了該進程所使用的所有共用庫的全部記憶體大小。對於單個共用庫,儘管無論多少個進程使用,實際該共用庫只會被裝入記憶體一次;因此,對於單個進程的記憶體使用量大小, RSS也不是一個精確的描述。

    PSS——不同於RSS的是,PSS按比例包含了其所使用的共用庫大小;例如,三個進程使用同一個佔用30記憶體頁的共用庫。對於三個進程中的任何一個,PSS將只包括其中的10個記憶體頁。PSS是一個非常有用的數字,因為系統中全部進程以整體的方式被統計,對於系統中的整體記憶體使用量是一個很好的描述。如果一個進程被終止,其PSS中所使用的共用庫大小將會重新按比例分配給剩下的並且仍在使用該共用庫的進程。 

    USS——是單個進程的全部私人記憶體大小,亦即全部被該進程獨佔的記憶體大小;

    USS是一個非常非常有用的數字,因為它揭示了運行一個特定進程的真實的記憶體增量大小,如果進程被終止,USS就是實際被返還給系統的記憶體大小。USS 是針對某個進程開始有可疑記憶體泄露的情況,進行檢測的最佳數字。

 

5.寫指令碼每隔一秒自動列印procrank的資訊

1)首先建立一個cmd.txt檔案,寫入需要執行的adb shell 命令,如:

 

2)寫python指令碼,如下:

import os,sys,timefor i in range(500):    os.popen("adb shell <cmd.txt")   #運行cmd.txt中的命令    step1=os.popen("adb  pull /data/test/t1.txt F:/100python/log102101.txt")   #把產生的t1.txt檔案下載到本地    fo = open("log102101.txt", ‘r+‘)    input = fo.read()    fo2 = open("mem.txt", ‘r+‘)    fo2.seek(0, os.SEEK_END)    #定位到mem.txt檔案尾部    fo2.write(input)    #寫入t1.txt的內容    fo.close()    fo2.close()    time.sleep(1)   #休息一秒,再進入下一個迴圈,也就是每隔一秒列印一次procrank的資訊print "ok"    #運行完畢的標誌

 註:cmd.txt檔案,python指令碼,mem.txt都存放在同一目錄下

 

3)運行monkey,同時執行寫好的指令碼

    產生的mem.txt檔案如下:

   

 附monkey命令:

adb shell monkey -p com.waboon.test --ignore-crashes --ignore-timeouts --ignore-native-crashes --pct-touch 30 -v -v -v --throttle 200 1000

 

4)mem.txt檔案中第五列的值是USS,將mem.txt檔案用notepad開啟,再選擇第五列的值複製到excel中組建圖表,如下:

5)分析值

 

android應用記憶體佔用測試(每隔一秒列印procrank的資訊)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.