android 测试 内存,Android性能测试之内存(二)
內存測試主要是為了檢測被測試應用在進行正常使用情況下,該應用消耗手機內存的情況,如果內存消耗過大就造成手機使用卡頓等現象,進而影響用戶體驗,甚至會影響日活數據和用戶留存等情況。因此,通常情況下,移動端應用內存占用大小也是產品一個比較重要的關注點和測試重點。為了保證應用不占用過多的系統資源,且能夠及時釋放內存,保證整個系統的穩定性。
關于內存測試需要引入幾種概念:
1、空閑狀態:指打開應用后,點擊home鍵讓應用后臺運行,此時應用處于的狀態叫做空閑
2、中等規格:對應用的操作時間的間隔長短不一,中等規格時間較長
3、滿規格:對應用的操作時間的間隔長短不一,滿規格時間較短
測試時,可根據用戶的操作習慣進而設置應用使用等級設置。下面是對幾種內存測試方法進行整理,可根據不同的測試場景和需求,選擇對應測試方案以便獲取相對準確的內存數據。
接下來我們說說在內存測試中,存在很多測試子項,如下清單所示:
1) 空閑狀態下的應用內存消耗情況
2)中等規格狀態下的應用內存消耗情況
3)?滿規格狀態下的應用內存消耗情況
4)?應用內存峰值情況
5)?應用內存泄露情況
6)?應用是否常駐內存
7)?壓力測試后的內存使用情況
目前存在的android的內存測試方法可以分為以下幾類:
1、使用Android自身提供的ActivityManager.MemoryInfo()方法獲得,通過該方法獲取某應用的內存信息。目前網易Emmagee,騰訊的GT等工具都是通過該方法實現某應用內存數據的獲取,測試簡單方便,安裝app以后選中對應的應用即可開始測試,完成測試后即可在本地sd卡中保持一份性能測試的數據,可從里面獲取內存信息。
2、使用android提供adb指令集獲取內存信息即adb shell dumpsys meminfo | grep packagename or pid來獲取
2.1、dumpsys獲取內存數據
指令:adb shell dumpsys meminfo
通過上述指令可以查看所有應用的內存消耗情況
如果想查看某一應用或某一個進程的詳細的內存信息,可用如下指令:
指令:adb shell dumpsys meminfo packagename or pid
從上面的Heap size類別中包含Native Heap和Dalvik Heap兩部分Heap,其中dalvik就是平時說的java堆,我們創建的對象都在這里分配的。其中,dalvik heap不能超過最大限制,超過最大限制就會出現OOM;
2.2、查看單個應用程序最大內存限制的指令:
adb shell getprop | grep or findstr heapgrowthlimit
上述查看到的單個內存最大限制為128MB,而meminfo里面dalvik heap size的最大值如果超過了128M就可能出現OOM。dalvik.vm.heapgrowthlimit和dalvik.vm.heapsize都是java虛擬機的最大內存限制,應用如果不想在dalvik heap達到heapgrowthlimit限制的時候出現OOM,需要在Manifest中的application標簽中聲明android:largeHeap=“true”,聲明后,如果應用的dalvik heap達到heapsize的時候才會出現OOM!另:設備不一樣,最大內存的限制也可能不一樣
C/C++申請的內存空間在native heap中,而java申請的內存空間則在dalvik heap中。這是因為Android系統對dalvik的vm heapsize作了硬性限制,當java進程申請的java空間超過閾值時,就會拋出OOM異常(這個閾值可以是48M、24M、16M等,視機型而定),可以通過adb shell getprop | grep dalvik.vm.heapgrowthlimit查看此值。
也就是說,程序發生OMM并不表示RAM不足,而是因為程序申請的java heap對象超過了dalvik vm heapgrowthlimit。也就是說,在RAM充足的情況下,也可能發生OOM
2.3、查看單個應用的內存占有量的情況,通常用如下手段查看
#查看單個應用程序最大內存限制:adb shell getprop|grep heapgrowthlimit
#應用啟動后分配的初始內存:adb shell getprop|grep dalvik.vm.heapstartsize
#單個java虛擬機最大的內存限制:adb shell getprop|grep dalvik.vm.heapsize
3、使用android提供的procrank獲取即可
通過指令:adb shell procrank | grep packagename
通過adb shell procrank指令可以獲取VSS,RSS,USS,PSS
VSS–Virtual Set Size虛擬耗用內存(包含共享庫占用的內存)
RSS–Resident Set Size實際使用物理內存(包含共享庫占用的內存)
PSS–Proportional Set Size實際使用的物理內存(比例分配共享庫占用的內存)
USS–Unique Set Size進程獨自占用的物理內存(不包含共享庫占用的內存)
一般來說內存占用大小有如下規律:VSS >= RSS >= PSS >= USS
4、通過ADT插件DDMS查看用內存MAT進行分析
利用DDMS的Heap可以很方便的查看app的內存占用情況,在app運行時,打開DDMS選項,在Devices下,可以看到正在運行的App,選擇要查看內存的App,點擊該條目,并選擇Update Heap,如下圖:
在Heap職工,選擇Cause GC,可以查看應用的占用情況,具體如下圖:
總結
以上是生活随笔為你收集整理的android 测试 内存,Android性能测试之内存(二)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: alook抓包教程
- 下一篇: R语言使用pdf函数将可视化图像结果保存