標籤:記憶體 sha 移動 一個 現象 通訊 參數 wait memory
流量常用方法
方法一:Android系統內建統計功能(總體流量數值)
Proc/uid_stat/{UID}/tcp_snd和tcp_rcv
- UID是每個app安裝時候分配的唯一編號用於識別該app.
- tcp_snd:表示發送資料累計大小,單位是位元組
- tcp_rcv:表示接收到的資料累計大小。
具體步驟:
(1)通過包名擷取app的PID;
(2)再訪問/proc/{PID}/status檔案尋找app對應的UID;
(3)通過UID號加上100000號查看接收和發送的流量檔案
方法二:Wireshark+tcpdump
./tcpdump -s 0 -w ./t1.pcap -v
- -s 0:預設抓包抓取長度是68位元組,加上-s 0可以抓到完整的資料包。
- -w xxx:抓取到的包存放路徑。
- -v:抓包過程中顯示抓包的數量
方法三:GT(隨身調)工具(直接調用android的api):
TrafficStats類是Android提供的一個流暢統計類,可以統計手機開機累計到現在使用的流量,也可以統計某個或者多個進程或者應用所使用流量,包括Wi-Fi和移動資料GPRS。
GT使用TrafficStats.getUidTxBytes(uid)來擷取流量資料(該方法號稱是擷取到指定 uid 發送流量的總和,但實測情況是只有 tcp 層的流量)。
GT(隨身調)是APP的隨身調試平台,是直接運行在手機上的IDTE。可以使用GT對APP進行快速的效能測試(CPU、記憶體、流量、電量、幀率/流暢度等)、開發日誌查看、Crash日誌查看、網路資料包的抓取、APP內部參數的調試、真機代碼耗時統計等。
GT官網
流量測試的分析
- 網域名稱的流量消耗:抓包後,利用現有工具統計不同網域名稱下的流量消耗。便於發現某個伺服器是否存在流量消耗過大。
- 協議的流量消耗:便於發現某個協議是否存在流量消耗過大或者協議拉取較頻繁的現象。
電量
Battery Historian:Google提供的電量分析工具,Android 5.0以上支援
adb shell dumpsys battery //讀取電量和溫度adb shell dumpsys batterystats --reset //重設電池統計資訊adb shell dumpsys batterystats > batterystats.txt // 擷取電池統計資訊python historian.py batterystats.txt > batterystats.html //產生報告
參考
CPU
/proc 檔案系統是一個偽檔案系統,只存在記憶體中而不佔用外存空間。它以檔案系統的方式為核心與進程提供通訊的介面。
從proc檔案可以擷取:系統、進程、線程的CPU時間片使用方式,所以兩次採集時間片的資料就可以擷取進程CPU佔用率。
CPU佔用率=(進程T2-進程T1)/(系統T2-系統T1)進程總CPU時間 總CPU時間 totalCPUTime=user+nice+system+idle+iowait+irq+softird processCPUTime=utime+stime+cutime+cstime 線程總CPU時間 threadCPUTime=utime+stime+cutime+cstime
- utime:該任務在用於態啟動並執行時間,單位為jiffies
- stime:該任務在核心態啟動並執行時間,單位為jiffies
- cutime:累計的該任務所有waited-for進程曾經在使用者態啟動並執行時間,單位為jiffies
- cstime:累計的該任務的所有的waited-for進程曾經在核心態啟動並執行時間,單位為jiffies
擷取系統CPU時間片:讀取proc/stat
擷取進程CPU時間片:proc/pid/stat
線程時間片:/proc/pid/task/tid/stat
記憶體
- 系統記憶體:
- 系統記憶體:/proc/meminfo
- 系統空閑記憶體:ActivityManager
- 系統已有記憶體:總記憶體-空閑記憶體
- 進程記憶體:
- 進程記憶體上限、總記憶體都可以直接使用 am.getProcessMemoryInfo(PID)擷取
- 也可以直接使用top命令
流暢度檢測
流暢度:Android系統每隔16.7ms發出垂直同步訊號(VSync訊號)(1000ms/60=16.67ms)觸發對UI進行渲染。流暢畫面需要60幀/s,為了能夠實現60幀/s,意味著計算渲染的大多數操作必須在16.7ms完成。
當繪幀間隔超過16.7ms,垂直同步機制會讓顯示器硬體等待GPU完成柵格化渲染操作,我們就可以說此時掉幀了,也會造成使用者直接感官的卡頓。
1秒內vSync訊號的次數定義為流暢值,即SM。
卡頓分類:
- 低流暢值區間:連續小卡頓造成的丟幀,即平均流暢值低於40幀/s的區間。
- 單次大卡頓:單次大卡頓造成的丟幀,即兩次繪幀間隔大於70ms,相當於丟了4幀以上的區間。
Android的幀繪製流程是:CPU主線程影像處理->GPU進行光柵化->顯示幀。APP產生掉幀的情況大多是由“CPU主線程影像處理”這一步超負載引起。
頁面啟動時間長度
頁面啟動時間長度:
- Activity啟動時間長度:喚醒Activity到Activity在前台進行第一次繪製的時間,繪幀檢測
- Fragment啟動時間長度:喚醒Fragment到Fragment執行onResume的完成時間。
- 冷啟動:頁面從startActivity開始
- 暖開機:頁面從onStart或者onResume開始
APP效能測試指標和測試方法