3、獲取APP 內存占用率


關於APP內存占用,不用多說,應該是APP性能測試中比較重要的一點。試想一下,開個應用把手機內存占滿了,其它應用無法打開,那么這個應用還會有人安裝嗎?我覺得是沒有的。下面就通過adb命令獲取APP虛存和實存數據。

top 用法

 

參數解釋:

   -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.                 //顯示幫助文檔

 

Windows下獲取APP 內存占用率

adb shell top 

 

參數解釋:

 

第一組數據的含義:

  1.  User 處於用戶態的運行時間,不包含優先值為負進程
     Nice 優先值為負的進程所占用的CPU時間
     Sys 處於核心態的運行時間
     Idle 除IO等待時間以外的其它等待時間
     IOW IO等待時間
     IRQ 硬中斷時間
     SIRQ 軟中斷時間

     

第二組數據的含義:

  1.  PID 進程id
     PR 優先級
     CPU% 當前瞬時CPU占用率
     S 進程狀態:D=不可中斷的睡眠狀態, R=運行, S=睡眠, T=跟蹤/停止, Z=僵屍進程
     #THR 程序當前所用的線程數
     VSS Virtual Set Size 虛擬耗用內存(包含共享庫占用的內存)
     RSS Resident Set Size 實際使用物理內存(包含共享庫占用的內存)
     PCY 調度策略優先級,SP_BACKGROUND/SP_FOREGROUND
     Name 進程的名稱

     

那么實際測試過程中,我們肯定要獲取多次虛存和內存進行比對,所以我們可以把log保存到本地,並且設置多長時間記錄一次。

adb shell top -d 20 > meminfo  // 每20s記錄一次,並把日志保存到meminfo里面

 

那么問題又來了。日志我們有了,但是里面的數據實在是太多了,我們不可能一個一個找,不然一天都找不玩,所以,我們依舊通過寫腳本方式從日志里面獲取我們想要的虛存和實存信息。

 

python腳本獲取APP 虛存/實存

#/usr/bin/python
#encoding:utf-8
import csv
import os
import  time

#控制類
class Controller(object):
    def __init__(self):
        #定義收集數據的數組
        self.alldata = [("id", "vss", "rss")]

    #分析數據
    def analyzedata(self):
        content = self.readfile()
        i = 0
        for line in content:
            if "com.begoit.studyplan" in line:
                print line
                line = "#".join(line.split())
                vss = line.split("#")[7].strip("K")
                rss = line.split("#")[8].strip("K")

                #將獲取到的數據存到數組中
                self.alldata.append((i, vss, rss))
                i = i + 1

    #數據的存儲
    def SaveDataToCSV(self):
        csvfile = file('meminfo.csv', 'wb')
        writer = csv.writer(csvfile)
        writer.writerows(self.alldata)
        csvfile.close()

    #讀取數據文件
    def readfile(self):
        mfile = file("meminfo", "r")
        content = mfile.readlines()
        mfile.close()
        return  content

if __name__ == "__main__":
    controller = Controller()
    controller.analyzedata()
    controller.SaveDataToCSV()

 

運行結果展示:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM