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,性能)