android應用內存佔用測試(每隔一秒打印procrank的信息)

1.內存佔用python

    對於智能手機而言,內存大小是固定的;所以,若是單個app的內存佔用越小,手機上能夠安裝運行的app就越多;或者說app的內存佔用越小,在手機上運行就會越流暢。因此說,內存佔用的大小,也是考量app性能的一個重要指標shell

 

2.原理說明app

對於一個app,咱們能夠關注它在3種狀態下的內存佔用狀況:ide

空負荷————app已經在後臺運行,可是用戶沒有使用;工具

中負荷————app在前臺運行,用戶進行了少許操做;性能

滿負荷————用戶持續頻繁大量操做,app接近飽和狀態運行。測試

然而,除了第一種狀況,其它兩種的主觀性很強,不是很容易區分。正常產品測試的時候,只要驗證後臺運行(5~10分鐘爲宜)和用戶持續頻繁大量操做(10~15分鐘爲宜)這兩種狀況下就能夠了。spa

這樣一來,就變成了如何持續統計並記錄app所佔內存的問題。Procrank工具能夠實現這個功能。.net

 

3.procrank的安裝excel

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/lib/libpagemap.so

     若是push不進三個文件或者修改不了三個文件的權限,那從新掛載一下system,再修改三個文件的權限,以下:

     mount   -o  remount,rw    /system 

 

4.  procrank各項值解析

     進入adb shell,獲取root權限,輸入命令:procrank便可,以下圖:

     

     VSS - Virtual Set Size 虛擬耗用內存(包含共享庫佔用的內存)
     RSS - Resident Set Size 實際使用物理內存(包含共享庫佔用的內存)
     PSS - Proportional Set Size 實際使用的物理內存(比例分配共享庫佔用的內存)
     USS - Unique Set Size 進程獨自佔用的物理內存(不包含共享庫佔用的內存)

     VSS和USS對查看某一進程自身的內存情況沒什麼做用,由於他們包含了共享庫的內存使用,而每每共享庫的資源佔用比重是很大的,這樣就稀釋了對Process自身建立內存波動。

     咱們通常觀察Uss來反映一個進程的內存使用狀況,Uss 的大小表明了只屬於本進程正在使用的內存大小,這些內存在此進程被殺掉以後,會被完整的回收掉。

     USS是一個很是有用的數字,由於它揭示了運行一個特定進程的真實的內存增量大小,若是進程被終止,USS就是實際被返還給系統的內存大小。USS 是針對某個進程開始有可疑內存泄露的狀況,進行檢測的最佳數字。

   懷疑某個程序有內存泄露能夠查看USS值是否一直有增長。

   

   

 

5. 寫腳本每隔一秒自動打印procrank的信息

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

 

2)寫python腳本,以下:

import os,sys,time
for 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)分析USS的值,查看是否有內存泄露。

 

 

遇到的問題:運行procrank時提示:

error: only position independent executables (PIE) are supported.

解決方法:下載bypass-pie.zip
下載連接: http://pan.baidu.com/s/1i35O8Wd

解壓,把裏面的linker文件替換手機 /system/bin裏的linker文件

相關文章
相關標籤/搜索