Android用戶端效能測試—記憶體【先碼】

來源:互聯網
上載者:User

標籤:system   append   回應時間   generated   alt      exce   finally   效能   

前言:

1.該內容為APP應用用戶端的效能測試,未涉及後台,所以並非針對API或資料介面

2.測試的目標項:資源消耗、記憶體泄露、電量功耗、回應時間

3.用戶端的效能指標:記憶體、CPU、流量

4.本系列主要是講述 如何擷取安卓APP應用的效能指標,並簡單分析,定位問題

 

一、查看 記憶體 指標:

準備工作:

(1).進入裝有測試APP手機的 “開發人員選項” 並開啟“USB偵錯模式”

(2).使用資料線將手機裝置與電腦裝置串連,可裝PP助手進行接入

(3).手機開啟待測APP,即開啟進程

 

1.命令列查看記憶體資料:

(1).開啟cmd

 

(2). 擷取裝置列表:輸入 adb devices(預先安裝adb驅動、若報錯,拔掉重新串連手機)

 

(3).進入該裝置的shell環境:輸入:adb -s 0815f8a3024a2605 shell  (若只有一台裝置,可直接 adb shell ,多台必須加裝置序號0815f8a3024a2605)

 

(4).尋找進程:輸入ps (模糊尋找)    尋找對應待測應用程式套件名,並記錄下其的pid(進程ID):20852,

若知道明確的包名,可直接準確尋找 ps |grep com.quncao.lark

 

(5).查詢記憶體資訊:

可通過兩種方式擷取:

a.通過 “ dumpsys meminfo  包名/pid ” 命令擷取,輸入:dumpsys meminfo 20852

Pss Total :實際使用的實體記憶體

private dirty:私人駐留記憶體

Heap Size:    佔用總記憶體(Heap  堆)(擴充:進程記憶體空間是虛擬記憶體,區分於實體記憶體,進程無法直接操作實體記憶體RAM。必要時,作業系統對其進行映射,使進程能應用到實體記憶體)

Heap Alloc:   分配記憶體

Heap Free:   空閑記憶體

native process和java process佔據記憶體的大小(擴充:c++申請的記憶體為native process,java申請的記憶體:java process)

記憶體大小:native process:13004

                    dalvik process:10448

註:因為Android系統對dalvik的vm heapsize作了硬性限制,當java進程申請的java空間超過閾值時,就會拋出OOM異常(這個閾值可以是48M、24M、16M等,視機型而定)

查看單個應用最大記憶體限制,輸入命令:getprop|grep heapgrowthlimit  得到結果該機型為192M。dalvik process 超過就會拋OOM異常

 

b.可直接通過:procrank 。

手機中的sh是經過精簡過的,有些手機可能沒有 procrank 命令,可以使用genymotion模擬器,或是自己安裝procrank命令。

(我也沒這個命令,沒有裝好,這部分內容未操作,為網路直接擷取)

 

VSS- Virtual Set Size 虛擬耗用記憶體(包含共用庫佔用的記憶體)——是單個進程全部可訪問的地址空間

RSS- Resident Set Size 實際使用實體記憶體(包含共用庫佔用的記憶體)——單個進程實際佔用的記憶體大小,不是精確描述

PSS- Proportional Set Size 實際使用的實體記憶體(比例分配共用庫佔用的記憶體)——對於系統中的整體記憶體使用量是一個很好的描述

USS- Unique Set Size 進程獨自佔用的實體記憶體(不包含共用庫佔用的記憶體)——單個進程的全部私人記憶體大小,亦即全部被該進程獨佔的記憶體大小。

一般來說記憶體佔用大小有如下規律:VSS >= RSS >= PSS >= USS。

 

USS 是針對某個進程開始有可疑記憶體泄露的情況,進行檢測的最佳數字

 

2.代碼擷取記憶體資料:

java調用Adb shell dumpsys meminfo再用字串截取方式擷取記憶體,可對其資料進行返回列印,實現監控。

傳入參數為:應用程式套件名,這個不可變。

 1 package com.hss.performanceTest; 2 /** 3  * from hss 4  * data:2017/9/8 5  * project:getMemory 6  */ 7 import java.io.BufferedReader; 8 import java.io.IOException; 9 import java.io.InputStreamReader;10  11 public class getMemory {12  13     public static String GetMemory(String packageName) throws IOException, InterruptedException {14  15         String str3=null;16           Runtime runtime = Runtime.getRuntime();17           Process proc = runtime.exec("adb shell dumpsys meminfo "+packageName);18           try {19  20               if (proc.waitFor() != 0) {21                   System.err.println("exit value = " + proc.exitValue());22               }23               BufferedReader in = new BufferedReader(new InputStreamReader(24                       proc.getInputStream()));25               StringBuffer stringBuffer = new StringBuffer();26               String line = null;27               while ((line = in.readLine()) != null) {28                   stringBuffer.append(line+" ");29  30               }31               String str1=stringBuffer.toString();32               String str2=str1.substring(str1.indexOf("Objects")-60,str1.indexOf("Objects"));     33               str3=str2.substring(0,10);34               str3.trim();35           } catch (InterruptedException e) {36               System.err.println(e);37           }finally{38               try {39                   proc.destroy();40               } catch (Exception e2) {41               }42           }43         return str3 ;44     }45     public static void main(String args[]) {46         47         System.out.println("開始運行...");48         try {49             String resurt = getMemory.GetMemory("com.hundsun.stockwinner.sxzq");50             System.out.println("山西證券的記憶體:"+resurt);51         } catch (IOException e) {52             // TODO Auto-generated catch block53             e.printStackTrace();54         } catch (InterruptedException e) {55             // TODO Auto-generated catch block56             e.printStackTrace();57         }             58     } 59     60 }

 

運行:

 

Android用戶端效能測試—記憶體【先碼】

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.