博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android 性能数据采集(概要)
阅读量:4227 次
发布时间:2019-05-26

本文共 3013 字,大约阅读时间需要 10 分钟。

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 所打印的,记录日志通过。

转载地址:http://xpdqi.baihongyu.com/

你可能感兴趣的文章
VC下线程同步的三种方法(互斥、事件、临界区)/(转)
查看>>
释放对象数组:delete与delete[]
查看>>
非常好的一篇U-BOOT的文章--转载
查看>>
计算机经典书籍
查看>>
ubuntu9.10 下开通samba 服务
查看>>
你的第一个中断处理程序
查看>>
内核模块编程-第一课
查看>>
ubuntu内核源码树的建立
查看>>
linux device driver II 的模块程序在linux kernel 2.6.x 上的移植
查看>>
Linux启动过程综述 作者:杨沙洲
查看>>
linux2.6.x的配置文件kconfig语法
查看>>
中断实例-tasklet
查看>>
linux内核引导参数
查看>>
MIPS Linux 下添加系统调用,以Linux kernel 2.6.18为例
查看>>
linux mips启动分析
查看>>
mips linux
查看>>
转载:ptrace
查看>>
制作mipsel-linux交叉编译工具
查看>>
linux mmap
查看>>
busybox + coredump
查看>>