Android 效能資料採集(概要)
CPU
adb shell dumpsys cpuinfo |grep packageName >/address/cpu.txt
大家看第一個應用CPU佔用率68%,這個過程是在使用者(user)中花61%的時間,並在核心空間(kernel)花費7.1%的時間。
或者:
adb shell top |grep packagename>/address/cpu.txt
記憶體
1. 記憶體耗用:
VSS - Virtual Set Size 虛擬耗用記憶體(包含共享庫佔用的記憶體)
RSS - Resident Set Size 實際使用實體記憶體(包含共享庫佔用的記憶體)
PSS - Proportional Set Size 實際使用的實體記憶體(比例分配共享庫佔用的記憶體)
USS - Unique Set Size 程式獨自佔用的實體記憶體(不包含共享庫佔用的記憶體)
1.空閒狀態下的應用記憶體消耗情況
2.中等規格狀態下的應用記憶體消耗情況
3.滿規格狀態下的應用記憶體消耗情況
4.應用記憶體峰值情況
5.應用記憶體洩露情況
6.應用是否常駐記憶體
7.壓力測試後的記憶體使用情況
2. 記憶體問題:
- 記憶體抖動
大量的物件在短時間建立和釋放,頻繁觸發GC,造成UI卡頓; 避免在迴圈體中new物件 String 和StringBuffer例子 避免在FrameCallback.doFrame()方法中new物件 重用物件 e.g 字串拼接使用StringBuff
- 記憶體洩露 OOM
程式中一些物件不再使用,但是一直被該物件的引用所持有,導致GC無法回收。
Activity洩露:Activity Drawable
Fragment洩露
3. 記憶體採集方式:
1.使用 android 本身提供的 ActivityManager.MemoryInfo() 方法獲得(此方法請百度或google)此類第三方工具有如網易的Emmagee、安測試、騰訊的GT等
private void GetMemory() {
final ActivityManager activityManager = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
ActivityManager.MemoryInfo info = new ActivityManager.MemoryInfo();
activityManager.getMemoryInfo(info);
Log.i(tag,"系統剩餘記憶體:"+(info.availMem >> 10)+"k");
Log.i(tag,"系統是否處於低記憶體執行:"+info.lowMemory);
Log.i(tag,"當系統剩餘記憶體低於"+info.threshold+"時就看成低記憶體執行");
}
availMem:表示系統剩餘記憶體
lowMemory:它是boolean值,表示系統是否處於低記憶體執行
hreshold:它表示當系統剩餘記憶體低於好多時就看成低記憶體執行
我用過以上三種最多,其實Top 也可以 還有很多方法都可以。
2.使用 android 提供的 adb shell dumpsys 命令來獲取
adb shell dumpsys meminfo |grep packagename >/address/mem.txt
3.使用 android 提供的 procrank
首先去google獲取procrank、procmem、libpagemap.so 三個檔案 ;
然後push檔案,執行
adb push procrank /system/xbin adb push procmem /system/xbin adb push libpagemap.so /system/lib
賦權
adb shell chmod 6755 /system/xbin/procrank adb shell chmod 6755 /system/xbin/procmem adb shell chmod 6755 /system/lib/libpagemap.so
在開啟工具記錄
adb shell procrank |grep packagename >/address/procrank.txt
對於記憶體的限制 是 dalvik heap不能超過最大限制,跟Native heap沒有關係。
流量
流量測試包括以下測試項:
- 應用首次啟動流量提示
- 應用後臺連續執行 2 小時的流量值
- 應用高負荷執行的流量峰值
- 應用中等負荷執行時的流量均值
1.
adb shell cat /proc/”+Pid+”/net/dev”
這邊的wlan0代表wifi 上傳下載量標識! 上傳下載量單位是位元組可以/1024換算成KB
這裡可以看到下載的位元組數 、資料包 和 傳送的位元組數 、資料包
小技巧:wlan0這些值如何初始化0 很簡單 你開啟手機飛航模式再關掉就清0了
2.
通過直接讀取android系統上的兩個檔案的內容:
Proc/uid_stat/{UID}/tcp_snd和tcp_rcv,其中UID是每個app安裝時分配的唯一編號用於識別該app,tcp_snd中的資料表示法術的資料累計大小,單位是位元組,tcp_rcv表示接收到的資料累計大小。
(1)首先獲取app的PID:
adb shell ps |grep packageName
(2)然後獲取app的UID
adb shell cat /proc/”+Pid+”/status
(3)獲取到應用的起始的接收及傳送的流量
adb shell cat /proc/uid_stat/+”UID”/tcp_rcv
adb shell cat /proc/uid_stat/+”UID”/tcp_snd
然後我們再操作應用,再次通過上述 2 條命令可以獲取到應用的結束的接收及傳送的流量,通過相減及得到應用的整體流量消耗
電量
功耗測試主要從以下幾個方面入手進行測試
測試手機安裝目標APK前後待機功耗無明顯差異
常見使用場景中能夠正常進入待機,待機電流在正常範圍內.
長時間連續使用應用無異常耗電現象
測試方法
第一種基於android提供的PowerManager.WakeLock來進行,
第二種比較複雜一點,功耗的計算=CPU消耗+Wake lock消耗+資料傳輸消耗+GPS消耗+Wi-Fi連線消耗,
第三種通過 adb shell dumpsys battery來獲取
啟動時長
Android效能測試-啟動時間:
首先我們來說說啟動時間。關於應用的啟動時間的測試,分為三類:
1) 首次啟動 –應用首次啟動所花費的時間
2) 非首次啟動 –應用非首次啟動所花費的時間
3) 應用介面切換–應用介面內切換所花費的時間
那麼如何來做啟動時間的測試呢,一般我們分為2類,一類為使用軟體來測試,可能大部分人都比較通曉使用android 提供的 DisplayManager 來獲取 activity 的啟動時間。通過日誌過濾關鍵字 Displayed 來過濾所有 activity 所列印的,記錄日誌通過。
相關文章
- 主機日常效能資料採集
- Android 自動化測試及效能資料採集的 Python 指令碼AndroidPython指令碼
- AWR資料採集方法
- Oracle AWR資料採集Oracle
- 資料採集知識分享|4大資料採集方式都有什麼?大資料
- 地圖資料採集,包括百度地圖採集,高德地圖採集,360地圖採集地圖
- phpQuery採集網站資料PHP網站
- 遊戲平臺採集資料遊戲
- amazon產品採集資料
- 工商資訊資料採集思路
- 網頁資料採集器網頁
- 資料採集作業二
- 資料採集作業2
- 資料採集作業3
- 大資料_資料採集_網頁01大資料網頁
- 專注深度學習模型精度和效能提升、資料採集清洗深度學習模型
- 【京東】商品list列表採集+類目下的商品列表資料採集
- 大資料技術之資料採集篇大資料
- Android音視訊(一) Camera2 API採集資料AndroidAPI
- 大資料採集:fillna函式大資料函式
- 資料採集的方法有哪些
- 資料採集工具是什麼
- 高效採集資料業務更安心
- 電商平臺資料採集介面
- 多執行緒資料採集執行緒
- 前端埋點資料採集(一)採集系統架構設計前端架構
- 程式採集裝置資料,不穩定,突然不採集, 程式崩潰
- 採集淘寶商品詳情頁資料
- PHP 資料採集的一種思路PHP
- 爬蟲資料採集的工作原理爬蟲
- 資料採集實踐作業2
- Labview軟體、NI資料採集卡、汽車發動機資料採集學習總結(二)View
- 【Python資料採集】國家自然科學基金大資料知識管理服務門戶資料採集Python大資料
- ViCANdo — 智慧駕駛資料採集及資料分析平臺
- Oracle資料倉儲的實時資料採集XSOracle
- [效能測試+資料採集展示分析+告警策略]Jmeter+Collectd+Influxdb+GrafanaJMeterUXGrafana
- 讓前端監控資料採集更高效前端
- PLC實時資料採集如何實現?