1. 程式人生 > >Android效能測試②-三種必備記憶體&CPU測試的方法

Android效能測試②-三種必備記憶體&CPU測試的方法

Android使用者也許會經常碰到以下的問題:

1)應用後臺開著,手機很快沒電了——應用耗電大;

2)首次/非首次啟動應用,進入應用特別慢——應用啟動慢;

3)應用使用過程中,越來越卡——CPU能力不足/記憶體洩露;

4)應用頁面卡頓——幀率較低、頁面卡頓。

因此,對開發的Android應用,必須對其進行效能測試,不然將會直接影響使用者體驗。

Android應用效能測試通常包括:啟動時間、記憶體、CPU、耗電量、流量、流暢度等。我們將在這個月陸續為大家簡單介紹一下每個測試點的常見測試方法及簡單的定位思路,僅供參考。本期我們介紹記憶體&CPU的測試方法。

記憶體和CPU測試主要是為了檢測應用在使用者不同使用強度下消耗手機記憶體和CPU的情況,如果記憶體消耗過大會造成手機使用時卡頓,閃退等現象,進而影響使用者體驗,甚至會影響日活資料和使用者留存等情況。因此,應用的記憶體佔用大小也是產品體驗好壞一個重要指標和測試重點。正常情況下,應用不應占用過多的記憶體資源,且能夠及時釋放記憶體,保證整個應用內的穩定性和流暢性。

根據手機的使用應用頻度和強度不同,可將應用使用強度分為如下幾種狀態:

l  空閒狀態:指啟動應用後,不做任何操作或切換到後臺執行的情況稱為空閒狀態,該情況為應用對記憶體的消耗是最小的。

l  中強度狀態:該情況使用者使用應用的強度和時間長短不確定,相對來說使用時長偏長。

 l  高強度狀態:該種情況為應用內高頻率的使用,使用者很少達到,跑monkey時可認為高強度狀態,該種情況常用來測試應用記憶體洩漏的情況測試時,可根據使用者的操作習慣模擬應用使用頻率和強度等級。

使用adb命令

1、 測試方法

手機連線電腦開啟 USB除錯模式,進入 adbshell

(1)檢視 CPU佔用率

使用命令top-m 10 -s cpu(-t 顯示程序名稱,-s 按指定行排序,-n 在退出前重新整理幾次,-d 重新整理間隔,-m 顯示最大數量),如下圖:


圖1

引數含義:

PID:progressidentification,應用程式ID

S: 程序的狀態,其中S表示休眠,R表示正在執行,Z表示僵死狀態,N表示該程序優先值是負數。

#THR:程式當前所用的執行緒數

VSS:VirtualSet Size虛擬耗用記憶體(包含共享庫佔用的記憶體)

RSS: ResidentSet Size實際使用實體記憶體(包含共享庫佔用的記憶體)

UID:UserIdentification,使用者身份ID

Name:應用程式名稱

在測試過程中,QA需要關注對應包的cpu佔用率,反覆進行某個操作,cpu佔用過高且一直無法釋放,此時可能存在風險。如果你想篩選出你自己的應用的話可以用下面命令top -d 3| greppackageName


圖2

(1)檢視記憶體使用情況

dumpsysmeminfo <package_name>或dumpsys meminfo <package_id>


圖3

引數含義:

l   Naitve Heap Size: 從mallinfo usmblks獲得,代表最大總共分配空間

l   Native Heap Alloc: 從mallinfo uorblks獲得,總共分配空間

l   Native Heap Free: 從mallinfo fordblks獲得,代表總共剩餘空間

l   Native Heap Size 約等於Native Heap Alloc + Native Heap Free

l   mallinfo是一個C庫, mallinfo 函式提供了各種各樣的通過C的malloc()函式分配的記憶體的統計資訊。

l   Dalvik Heap Size:從Runtime totalMemory()獲得,Dalvik Heap總共的記憶體大小。

l   Dalvik Heap Alloc: Runtime totalMemory()-freeMemory() ,Dalvik Heap分配的記憶體大小。

l   Dalvik Heap Free:從Runtime freeMemory()獲得,Dalvik Heap剩餘的記憶體大小。

l   Dalvik Heap Size 約等於Dalvik  HeapAlloc + Dalvik  Heap Free

重點關注如下幾個欄位:
(1) Native/Dalvik 的 Heap 資訊中的alloc
具體在上面的第一行和第二行,它分別給出的是JNI層和Java層的記憶體分配情況,如果發現這個值一直增長,則代表程式可能出現了記憶體洩漏。
(2) Total 的 PSS 資訊
這個值就是你的應用真正佔據的記憶體大小,通過這個資訊,你可以輕鬆判別手機中哪些程式佔記憶體比較大了。

AndroidStudio 自帶 CPU 和記憶體檢測功能

2.1 測試方法

手機連線電腦,在標1中選擇要除錯的手機,標註2中選擇要檢測的應用程序,memory是記憶體監控,cpu是cpu監控。


圖4

測試時,重點關注兩點:

1)退出某個頁面後,記憶體是否回落。如果沒有及時回落,也不一定就是問題,可能程式還沒有自動GC,故一般情況下,需要手動GC,如果手動GC後,仍無法回落,此時可以確定有問題。

2)進行某個操作後,記憶體增長的過快,也可能存在風險,此時可反覆操作進行確認。

2.2總結

AndroidStudio 自帶 CPU 和記憶體檢測工具,繪製出變化圖,可以直觀明瞭的看出記憶體和cpu的變化曲線。

使用Android自身提供的ActivityManager.MemoryInfo()方法獲得

通過該方法獲取某應用的記憶體資訊。目前網易的Emmagee工具就是通過該方法實現某應用記憶體和cpu資料的獲取,測試簡單方便,安裝app以後選中被測應用即可開始測試,介面會展示記憶體、CPU和流量等資料。完成測試後,可在本地SD卡種儲存一份效能測試資料,可以從裡面獲取記憶體資訊。