Android 性能测试工具- Emmagee
备注:个人学习笔记整理,仅供测试同学学习,切莫转载商用,有错误或者更好的方案可以留言,一同进步!
参考学习(因为已经不怎么更新了就不再关注了):
https://www.cnblogs.com/zhengna/p/9985576.html
https://cloud.tencent.com/developer/article/1451870
https://blog.csdn.net/zd199218/article/details/80698192
https://www.cnblogs.com/QiangWum/p/12516544.html
https://www.cnblogs.com/shouke/p/10157895.html
- Emmagee 简介
- 功能介绍
- 下载与安装
- 使用
- 测试报告
- 实现原理
- 使用场景
一:Emmagee 简介
Emmagee是网易开发的Android性能监测工具,开源
Emmagee主要用于监控单个App的CPU,内存,网络流量,电池电流,启动时间和状态等,且用户可自定义监控的频率以及性能的实时显示,并最终生成一份性能统计文件
二:优缺点
优点:
- 检测应用从启动开始到当前时间消耗的流量数
- 检测当前时间被测应用占用的CPU使用率、总体CPU使用量
- 检测当前时间被测应用占用的内存量、占用的总体内存百分比、剩余内存量
- CSV格式报告,同时存储在手机中
- 在浮窗中可以快速启动或者关闭手机的wifi网络
- 浮动窗口,呈现实时进程状态
- 自定义的收集间隔
缺点:
- Android 5.0及以上版本:不推荐使用getRunningTasks()和getRunningAppProcesses(),只返回您的应用程序进程,因此无法从Android 5.0获取TopActivity。
- Android 7.0:谷歌限制访问/ proc,也无法从Android 7.0中的TOP命令获取目标应用程序的pid,因此不能支持7.0及以上版本。
- 安卓版本7.0及以上不支持
- 不支持的设备:https://github.com/NetEase/Emmagee/wiki/Some-devices-are-not-supported
我使用遇到的问题:
夜神(安卓版本5.1出现问题兼容性问题):https://blog.csdn.net/weixin_42717928/article/details/106952200
三:下载与安装
官网:https://github.com/NetEase/Emmagee/releases
点击就安装到我的模拟器了...好吧,点击打开,选中要测试的应用
四:使用
我就很简单,把包拉到模拟器里面安装
打开Emmagee会显示出目前系统已经安装的应用(可在设置中配置间隔)。
选择一个应用之后,点击“开始测试”按钮,Emmagee会自动启动被测应用,并在最上方显示流量、CPU、内存等数据,在该状态下可任意使用被测应用,Emmagee会自动进行相关数据的记录,终止测试之后会生成相应的报告,并保存在Android目录中。
五:测试报告
(1)Emmagee-->设置-->测试报告-->打开。(看的比较难受)
(2)从手机Android目录Emmagee中打开CSV文件。
C:\Users\AUSU>adb shell
root@android:/ # cd data/media/0/Emmagee
root@android:/data/media/0/Emmagee # ls
20200625210355_com.ss.android.ugc.aweme.csv
20200625210447_com.ss.android.ugc.aweme.csv
20200625210503_com.ss.android.ugc.aweme.csv
adb pull /data/media/0/Emmagee/20200625232546_com.ss.android.ugc.aweme.csv d:/a
(3)在设置中配置邮箱地址后自动发送到邮箱,在邮箱打开。
我这随便测试了一下抖音,报告如下
应用包名 | com.ss.android.ugc.aweme | |||||||||||||
应用名称 | 抖音短视频 | |||||||||||||
应用PID | 2392 | |||||||||||||
机器内存大小(MB) | 3483.5MB | |||||||||||||
机器CPU型号 | ARMv7 Processor rev 0 (v7l) | |||||||||||||
Android系统版本 | 4.4.2 | |||||||||||||
手机型号 | SM-N960F | |||||||||||||
UID | 10028 | |||||||||||||
时间 | 栈顶Activity名称 | 应用占用内存PSS(MB) | 应用占用内存比(%) | 机器剩余内存(MB) | 应用占用CPU率(%) | CPU总使用率(%) | cpu0总使用率(%) | cpu1总使用率(%) | 流量(KB) | 电量(%) | 电流(mA) | 温度(C) | 电压(V) | 帧率 |
2020/6/25 23:25 | ComponentInfo{com.ss.android.ugc.aweme/com.ss.android.ugc.aweme.splash.SplashActivity} | 121.74 | 3.49 | 2978.24 | 0 | 0 | 0 | 0 | 3 | 90 | N/A | 42 | 4.4 | 51 |
2020/6/25 23:25 | ComponentInfo{com.ss.android.ugc.aweme/com.ss.android.ugc.aweme.splash.SplashActivity} | 127.79 | 3.67 | 2969.45 | 12.12 | 31.5 | 26.13 | 36.95 | 3209 | 90 | N/A | 42 | 4.4 | 55 |
可以将csv数据拷贝到excel中生成图表
数据性能指标:应用占用内存PSS(MB):应用当前占内存的大小应用占用内存比(%):应用占总内存的百分比机器剩余内存(MB):机器当前剩余内存应用占用CPU率(%):应用占用总CPU的百分比CPU总使用率(%):CPU的总使用率,所有在运行的应用CPU0-CPU1总使用率(%):手机是多核的(2核显示cpu0-cpu1,4核显示cpu0-cpu3,10核显示到cpu0-cpu9)流量(KB):从检测开始到结束所使用的的流量数电量(%):剩余电池的百分比(有误差,测试尽可能关掉其他应用)电流(mA):小于0是放电,大于0是充电温度(C):手机当前的温度电压(V):一般手机锂电池bai的电压都是标3.7V(实际上手机电池(以下均指普通锂电池)满电电压为4.2,电池用到3.4V以下就没多少电了,再低一点就保护了手机就自己关机了)帧率:不了解
六:实现原理(了解一下)
1:监控CPU
Android系统是基于Linux内核的,所以系统文件的结构和Linux下一样,
系统总体CPU使用信息放在/proc/stat文件下,/proc/cpuinfo文件存放CPU的其它信息,包括CPU名称,直接读取即可。
Emmagee是将选中应用的PID传入,读取/proc/PID/stat文件信息及可获取该PID对应程序的CPU信息。
/proc/stat文件信息:包含系统启动以来的很多系统和内核的统计信息
参数含义(这里以CUP0那行的参数为例子):
name(CPU0):名字user (1883):从系统启动开始累计到当前时刻,用户态的CPU时间(单位:jiffies) ,不包含nice值为负进程。1jiffies=0.01秒nice (111):从系统启动开始累计到当前时刻,nice值为负的进程所占用的CPU时间(单位:jiffies)system (999):从系统启动开始累计到当前时刻,内核态时间(单位:jiffies)idle (22132):从系统启动开始累计到当前时刻,除硬盘IO等待时间以外其它等待时间(单位:jiffies)iowait (369):从系统启动开始累计到当前时刻,硬盘IO等待时间(单位:jiffies) irrq (0):从系统启动开始累计到当前时刻,硬中断时间(单位:jiffies)softirq (71):从系统启动开始累计到当前时刻,软中断时间(单位:jiffies)steal(0):虚拟化环境中运行其他操作系统上花费的时间(自Linux 2.6.11开始)guest(0):操作系统运行虚拟CPU花费的时间(自Linux 2.6.24开始) guest_nice(0):运行一个带nice值的guest花费的时间(自Linux 2.6.33开始)其他参数:
intr:系统启动以来的所有中断(interrupts)的次数情况ctxt: 系统启动以来的CPU上下文切换次数btime:启动时长(单位:秒),从Epoch(即1970零时)开始到系统启动所经过的时长,每次启动会改变
此处指为1593156149,转换北京时间为2020/6/26 15:22:29
(可以去https://unixtime.51240.com/玩玩)processes:系统启动后所创建过的进程数量。当短时间该值特别大,系统可能出现异常procs_running:处于运行队列(Runnable)状态的进程个数procs_blocked:处于等待I/O完成的进程个数
/proc/cpuinfo文件信息:
root@android:/proc # cat cpuinfoprocessor : 0 //系统中逻辑处理核的编号。对于单核处理器,则默认为是其CPU编号,对于多核处理器则可以是物理核、或者使用超线程技术虚拟的逻辑核vendor_id : GenuineIntel //CPU制造商cpu family : 6 //CPU产品系列代号model : 60 //CPU属于其系列中的哪一代的代号model name : Intel(R) Core(TM) i5-4200H CPU @ 2.80GHz //CPU属于的名字及其编号、标称主频stepping : 3 //CPU属于制作更新版本cpu MHz : 2796.702 //CPU的实际使用主频cache size : 3072 KB //CPU二级缓存大小physical id : 0 //单个CPU的标号siblings : 2 //单个CPU逻辑物理核数core id : 0 //当前物理核在其所处CPU中的编号,这个编号不一定连续cpu cores : 2 //该逻辑核所处CPU的物理核数apicid : 0 //用来区分不同逻辑核的编号,系统中每个逻辑核的此编号必然不同,此编号不一定连续initial apicid : 0
fdiv_bug : no
hlt_bug : no
f00f_bug : no
coma_bug : no
fpu : yes //是否具有浮点运算单元(Floating Point Unit)fpu_exception : yes //是否支持浮点计算异常cpuid level : 13 //执行cpuid指令前,eax寄存器中的值,根据不同的值cpuid指令会返回不同的内容wp : yes //表明当前CPU是否在内核态支持对用户空间的写保护(Write Protection)flags : fpu vme...... //当前CPU支持的功能bogomips : 5593.40 //在系统内核启动时粗略测算的CPU速度(Million Instructions Per Second)clflush size : 64 //每次刷新缓存的大小单位cache_alignment : 64 //缓存地址对齐单位address sizes : 39 bits physical, 48 bits virtual //可访问地址空间位数power management: //对能源管理的支持
2:监控内存的实现原理
内存和cpu的处理方式类似。先获取到当被测应用的PID,然后按照PID从 /proc/meminfo文件中获取当前被测应用占用的内存信息。
/proc/meminfo文件信息
[root@realhost /]# cat /proc/meminfo
MemTotal: 688576 kB 总内存
MemFree: 153736 kB 空闲内存
MemAvailable: 339884 kB 可用内存
Buffers: 16 kB 给文件的缓冲大小
Cached: 267672 kB 高速缓冲存储器
SwapCached: 36 kB 被高速缓冲存储用的交换空间的大小
Active: 222900 kB 活跃使用中的高速缓冲存储器页面文件大小
Inactive: 123700 kB 不经常使用中的告诉缓冲存储器文件大小
Active(anon): 31800 kB 活跃的匿名内存(进程中堆上分配的内存,是用malloc分配的内存)
Inactive(anon): 57272 kB 不活跃的匿名内存
Active(file): 191100 kB 活跃的file内存,//file内存:磁盘高速缓存的内存空间和“文件映射(将物理磁盘上的文件内容与用户进程的逻辑地址直接关联)”的内存空间,其中的内容与物理磁盘上的文件相对应
Inactive(file): 66428 kB 不活跃的file内存
Unevictable: 0 kB 不能被释放的内存页
Mlocked: 0 kB mlock()系统调用锁定的内存大小
SwapTotal: 2097148 kB 交换空间总大小
SwapFree: 2096884 kB 空闲交换空间
Dirty: 0 kB 等待被写回到磁盘的大小
Writeback: 0 kB 正在被写回的大小
AnonPages: 78876 kB 未映射页的大小
Mapped: 28556 kB 设备和文件映射大小
Shmem: 10160 kB 已经被分配的共享内存大小
Slab: 102916 kB 内核数据结构缓存大小
SReclaimable: 49616 kB 可收回slab的大小
SUnreclaim: 53300 kB 不可回收的slab的大小
KernelStack: 4416 kB kernel消耗的内存
PageTables: 6028 kB 管理内存分页的索引表的大小
NFS_Unstable: 0 kB 不稳定页表的大小
Bounce: 0 kB 在低端内存中分配一个临时buffer作为跳转,把位于高端内存的缓存数据复制到此处消耗的内存
WritebackTmp: 0 kB USE用于临时写回缓冲区的内存
CommitLimit: 2441436 kB 系统实际可分配内存总量
Committed_AS: 308028 kB 当前已分配的内存总量
VmallocTotal: 34359738367 kB 虚拟内存大小
VmallocUsed: 179588 kB 已经被使用的虚拟内存大小
VmallocChunk: 34359310332 kB malloc 可分配的最大的逻辑连续的内存大小
HardwareCorrupted: 0 kB 删除掉的内存页的总大小(当系统检测到内存的硬件故障时)
AnonHugePages: 6144 kB 匿名 HugePages 数量
CmaTotal: 0 kB 总的连续可用内存
CmaFree: 0 kB 空闲的连续内存
HugePages_Total: 0 预留HugePages的总个数
HugePages_Free: 0 池中尚未分配的 HugePages 数量
HugePages_Rsvd: 0 表示池中已经被应用程序分配但尚未使用的 HugePages 数量
HugePages_Surp: 0 这个值得意思是当开始配置了20个大页,现在修改配置为16,那么这个参数就会显示为4,一般不修改配置,这个值都是0
Hugepagesize: 2048 kB 每个大页的大小
DirectMap4k: 108416 kB 映射TLB为4kB的内存数量
DirectMap2M: 940032 kB 映射TLB为2M的内存数量
DirectMap1G: 0 kB 映射TLB为1G的内存数量参考文章:http://linuxperf.com/?P=142
3:监控流量消耗的实现原理
系统中有存放整体流量和针对当程序的流量统计,
/proc/net/dev和/proc/uid_stat/UID下存放tcp_rcv和tcp_send文件,分别存放下行流量和上行流量,操作前后相减就得出结果 。
4:监控电量的实现原理
电量、电压和温度情况是通过监听系统的电池管理事件的广播来获取的。
5:监控启动时间的实现原理
我们点击界面的开始测试时,程序会启动EmmageeService,之后所有的数据统计以及更新都是EmmageeService 进行处理的。
EmmageeService会在onStartCommand()里面启动一个线程“handler.postDelayed(task, 1000)”,
进行数据的更新同时会尝试通过ActivityManger从logcat中获取到软件的启动时间。
七:使用场景
例子1:app首次启动的相关性能状态
场景描述:点击app,启动app直到出现app主页面。
测试操作:
1.打开Emmagee
2.选择app,点击“开始测试”,出现主页面后,点击“停止测试”
3.用手机清理软件,清理“被测app”。
4.重复步骤2
数据分析:
实践中发现启动耗时经常是获取不到的
解决方法:设置采集频率的时间为最小值,比如1s,这样Emmagee就可以根据测试报告中,“时间”一栏大致统计出这个功能的耗时情况。
可以根据多次的测试数据,求出各类数据的“均值”,“峰值”
例子2:app二次启动的相关性能状态
场景描述:点击app,启动app直到出现app主页面,退出app
测试操作:1.打开Emmagee
2.选择app,点击“开始测试”,出现主页面后,退出app,点击“停止测试”
3.重复步骤2
例子3:测试某个流程,目的在于找出性能“瓶颈”
针对某个业务流,做一个完整的业务过程的操作
根据测试生成的.csv文件,绘制相关数据的曲线图,查看曲线变化--平稳?起伏不定?还是“峰回路转”?如果不是很平稳,则说明性能上可能存在瓶颈,需要进一步分析是那个操作步骤中出现的
Android 性能测试工具- Emmagee相关推荐
- Emmagee—开源Android性能测试工具
下载:https://github.com/NetEase/Emmagee/releases/download/V2.5/Emmagee.apk 1.Emmagee--Android性能测试工具 Em ...
- android 性能测试工具下载,Android性能测试 一些适用于Android Studio的代码审查和性能测试工具...
导言: Android应用在CPU占用,内存消耗方面的性能指标是影响产品质量的重要因素,由于QQ管家,360手机助手等应用都提供直观的内存消耗,流量监控功能,致使用户比以往更加关注软件的性能,并以此进 ...
- 阿里巴巴Android性能测试工具mobileperf正式开源 (天猫精灵Android性能测试-线下篇)
官方首发 阿里巴巴技术质量:Android 性能测试工具 mobileperf 开源 (天猫精灵 Android 性能测试-线下篇) Android性能测试工具mobileperf github 如果 ...
- APP性能测试工具Emmagee的使用总结
1,Emmagee是网易杭州研究院QA团队开发的一个简单易上手的Android性能监测小工具,主要用于监控单个App的CPU,内存,流量,启动耗时,电量,电流等性能状态的变化,且用户可自定义配置监控的 ...
- Android性能测试工具腾讯GT的使用教程
一:腾讯GT GT(也叫随身调) 安卓/IOS手机端调测组件,用于安卓平台的性能测试.竞品测试及仅凭一台手机进行App测试的场景. 应用特性 GT(随身调)是APP的随身调测平台,它是直接运行在手机上 ...
- android性能测试工具之dumpsys
补记: MAT(memory analyzer tool )是google 推荐的进行内存使用量分析的工具. 功能全面而强大!!! 首先看一下dumpsys有哪些功能: dumpsys 用来给出手机中 ...
- Android性能测试工具腾讯GT的使用
目录 GT是什么 安装GT 使用 总结 GT是什么 GT(随身调) Android版是腾讯 MIG 专项测试组自行研发的Android APP随身调测平台,它是直接运行在手机上的"集成调测环 ...
- 移动应用性能测试工具—PerfDog
移动应用性能测试工具-PerfDog 前言 当前移动设备越来越多地涌现在我们日常生活中,人们通过移动设备可以高效地完成很多事,比如网络购物.充值缴费.新闻资讯.理财等.随着中国IT.互联网的发展和市场 ...
- PerfDog性能测试工具调研报告
PerfDog性能测试工具调研报告 当前iOS性能测试工具少,且每个工具或多或少存在弊端和缺陷,阻碍性能测试的正常进行和效率提升,今天带来一款移动全平台性能测试分析专业工具PerfDog性能狗,这款工 ...
- 性能测试 理论初探(七) 性能测试工具 介绍 目前知道哪些性能工具?分别用在什么软件或平台的性能测试?服务端、web前端、移动端等 性能测试工具有哪些?
文章目录 一.前言 二.常见性能测试工具 1.服务端性能测试工具 1.1 Jmeter 1.2 Locust 1.3 LoadRunner 1.4 LoadNinja 1.5 Jmeter + Pro ...
最新文章
- ipvsadm使用简介
- V-rep学习笔记:机器人模型创建2—添加关节
- 躺平设计家“造风” 阿里家装数字化加速“入海”
- 算法(10)-leetcode-explore-learn-数据结构-链表双指针技巧
- TFS Training for Kunlun bank (http://www.klb.cn/) 微软研发流程(ALM)管理培训会议(昆仑银行) 2016.09.21...
- 菜鸟学IT之python3关于列表,元组,字典,集合浅认识!
- nginx ngx_http_auth_basic_module(Basic Authentication)
- 超详细的MySQL工作原理 体系结构
- git单独删除某个文件的所有历史记录
- MyBatis #{ } ${ }
- python变量未定义_引入模块的全局变量未定义
- (面试题)用折半查找法在一组整形数组中查找某个数据
- 【学习体会】泊松表面重建
- Static Single Assignment(SSA)
- opencv边缘检测加提取(圆形和矩形)
- PHP-SDK实现微信付款码支付
- 【MOOC】计算机网络与通信技术笔记(北交)(2)物理层
- ubuntu16.04+Tesla P100+cuda+anaconda+cudnn+tensorflow:从0开始安装
- MATLA 如何让保存的文件名随着参数的改变而改变
- 前置++和后置++区别
热门文章
- 如何画 软件工程 流程图
- 联创宽带上网助手协议的简单分析(二) :identify包的构造
- VBA版本获取ClientKey
- 目前常见软件保护技术概述
- 开放式虚拟仿真实验服务器,润尼尔开放式虚拟仿真实验教学及资源共享平台
- 计算机电子表格相关简答题,2017年计算机一级excel操作试题及答案
- ftl有三种映射地址_ftl 入门
- 如何用matlab建立风力机模型,风力机的Matlab模型及其应用
- 大白用html5制作,暖心大白纸雕灯的制作过程 给圣诞节礼物助力啦
- 2019新版《龙果学院JavaEE秒杀系统企业级实战应用教程》