APP CPU测试
CPU數據收集及數據解釋
#方法一:top adb shell top |grep <包名> #方法二:cpuinfo adb shell dumpsys cpuinfotop:獲取CPU實時使用率
從左到右參數:PID、USER、PR、NI、VIRT、RES、SHR、S、%CPU、%MEM、TIME+、NAME
- PID:應用程序在系統中的ID;
- PR: Priority 優先級
- NI:nice值。負值表示高優先級,正值表示低優先級m
- VIRT:Virtual memory usage 虛擬內存
1、進程“需要的”虛擬內存大小,包括進程使用的庫、代碼、數據等
2、假如進程申請100m的內存,但實際只使用了10m,那么它會增長100m,而不是實際的使用量 - RES:Resident memory usage 常駐內存
1、進程當前使用的內存大小,但不包括swap out
2、包含其他進程的共享
3、如果申請100m的內存,實際使用10m,它只增長10m,與VIRT相反
4、關于庫占用內存的情況,它只統計加載的庫文件所占內存大小 - SHR:Shared memory 共享內存
1、除了自身進程的共享內存,也包括其他進程的共享內存
2、雖然進程只使用了幾個共享庫的函數,但它包含了整個共享庫的大小
3、計算某個進程所占的物理內存大小公式:RES – SHR
4、swap out后,它將會降下來 - S : Process status 進程狀態。
D=不可中斷的睡眠狀態
R=運行
S=睡眠
T=跟蹤/停止
Z=僵尸進程 - CPU%:當前瞬時所以使用CPU占用率;
- %MEM:內存使用率
dumpsys cpuinfo
第一行:cpuload (負載平均值)信息:Load: 7.01/ 7.08 / 7.08【代表(平均一分鐘,五分鐘和十五分鐘)】
參考文章:https://blog.csdn.net/lindroid/article/details/90904947
獲取cpuinfo文件參數
#物理CPU數 cat /proc/cpuinfo | grep "physical id " | sort | uniq #CPU核數 cat /proc/cpuinfo | grep "cpu cores" | sort | uniq #邏輯CPU cat /proc/cpuinfo | grep "processor" | sort -n -k 35.8%:CPU占用率,其中4.6%是用戶使用的,1.1%是內核的占用率。因為CPU個數是1,所以除以1。
CPU問題表現
發燙、卡頓、ANR現象
解決思路:
- 如果已經導致ANR, 則去log里面搜索"ANR in"
- 沒有導致ANR則基于以上方法獲取到的CPU占用率,如果某場景的CPU占用率走勢異常、峰值存在異常、均值大于基線,則可以利用DDMS查看分析Trace文件,或者使用Android studio里面的Android Monitor根據Monitor中的CPU可以看出目前CPU明細使用。
- 查找程序中有沒有特殊布局或者特殊操作(GPS定位,一直刷新類的服務等),特殊加載(Gif圖片加載,視頻,音頻加載等)
ANR 表現為應用無響應,頁面出現彈窗,提示關閉應用還是等待。
CPU測試設計
-
在空閑時間的消耗,基本沒大應用使用cpu
如果APP在退出界面后還有進程長期運行,那需要關注下待機場景的CPU。待機場景下CPU的消耗一般不會很大,例如福州直銷銀行APP在后臺運行時,可能消耗經常是0%,長時間平均下,可能只有0.1%、0.2%,看看競品,也是差不多,好像沒有太大區別。那么CPU消耗這么少是不是就不用管CPU了呢,然而即使是平均值很小,但是長時間待機,例如安全類工具,CPU的消耗還是不容忽視。
這種場景下我們測試時常用的單位有:消耗XX jiffies/分鐘;半/1小時共增加XX jiffies。 -
在運行一些應用的情況下,cpu已占50%的情況下,觀察應用程序占用cpu的情況
簡單說這種情況就是后臺已經有幾個應用在運行已經并且消耗了系統的一些資源的情況下進行測試。 -
在高負荷的情況下看CPU的表現,我定義這個高負荷,cpu占用應是在80%以上
滿規格狀態下的應用CPU消耗情況 -
觀察App 相同/不同場景下CPU走勢、峰值情況
對比不同場景頁面CPU占用大小
對比不同時間段同一場景頁面CPU占用走勢情況
CPU問題排查
(1)是否有非常多的網絡請求
(2)是否開了很多進程OR 應用,嘗試關閉其他應用再查看CPU是否降下來
(3)是否有大量大圖片、視頻處理跟加載或布局
(4)查找程序中有沒有特殊布局或者特殊操作(GPS定位,一直刷新類的服務等),特殊加載(Gif圖片加載,視頻,音頻加載等)
(5)當前頁面是否有過多的圖表、曲線圖等繪制操作
(6)通過Android Studio 自帶的monitor查找是哪個Activity或者哪個方法有一直不停止的運算消耗CPU(比如:不停止的while 或者for 循環)
名詞解析:
SWAP OUT:當某進程向OS請求內存發現不足時,OS會把內存中暫時不用的數據交換出去,放在SWAP分區中,這個過程稱為SWAP OUT。
SWAP IN:當某進程又需要這些數據且OS發現還有空閑物理內存時,又會把SWAP分區中的數據交換回物理內存中,這個過程稱為SWAP IN。
參考文章:https://www.jianshu.com/p/31b1a4aef550
總結
- 上一篇: IT人转型的终极目标
- 下一篇: 阶段三-02 用例之间上下文传递