1. 移动端性能监测的主要途径
移动端性能监测的主要途径有三种:一是开发工具自带的监测工具,例如xcode自带的instrument,Android studio自带的Android monitor;二是使用第三方SDK;三是自行开发检测代码。三种途径各有利弊。
开发工具自带的监测工具,包含了很多强大的监测功能,且持续迭代更新,使用方便,为开发阶段的性能测试提供强有力的支持。但是只能在开发工具内部使用,不能独立使用在其他产品周期内。
专门用于性能监测和用户行为、属性分析的第三方SDK,比如Bugly,OneAPM,听云,Firebase,把它们接入项目可以进行性能监测,这些第三方的工具工作原理都是类似的:引入SDK和相关库,在程序入口处启动监测,在关键函数之前和之后自动埋点记录上报。然而使用第三方SDK的缺点也是非常明显的,首先是可定制性差,我们需要的一些指标无法收集,SDK收集的我们又不完全需要,很有可能为了简单的几个值,让安装包增大许多。除性能指标外,SDK是否统计了其他数据,我们并不完全知道,涉及到安全性问题。
自行在项目中植入监测代码的优势就是安全可靠,并且可定制化指标,有针对性。缺点就是需要开发成本,而且在代码中监测App的性能本身可能也会带来额外的性能损耗。
2. 移动端核心性能指标
App的性能问题包括崩溃、网络请求错误或超时、响应速度慢、列表滚动卡顿、流量大、耗电等。而导致App性能低下的原因有很多,除去设备硬件和软件的外部因素,其中大部分是开发者错误地使用线程、锁、系统函数、编程范式、数据结构等导致的。即便是最有经验的程序员,也很难在开发时就能避免所有导致性能低下的"坑",因此解决性能问题的关键是在于能不能尽早地发现和定位这些"坑"。
衡量一个App的性能有很多方面的指标,不同App的特征会有不同的侧重指标。其中,核心的性能检测指标(普遍会监测的指标)有:
- 内存占用量(MEM)
- CPU使用率(CPU)
- 页面刷新帧率(FPS)
- 网络状况(Net)
- 流量消耗(Flow)
- 卡顿(Flag)
- 崩溃(Crash)
- 启动时间
3. 不同迭代周期对移动端性能测试的需求
一个App的迭代生命周期,可大体分为开发期、测试期、线上期。
- 开发时期,需要能够检查性能异常点并通知给开发者;
- 测试时期,需要使用测试工具产生性能测试报告;
- 上线时期,通过监控平台上报性能数据,实现线上问题定位和追查。
不同的迭代周期对于测试工具具有不同需求:
- 开发和测试阶段:直观看到性能测试的结果,一个可以全面检测App性能指标的本地监测工具就可以满足需求。
- 上线阶段:我们对于用户使用的应用无法做到像针对测试阶段的应用的可控程度,所以需要通过引入性能监测SDK的方式,在运行阶段将运行在用户设备中的应用性能指标上传至监控平台,便于监测应用线上的性能表现并定位问题。
4. 主流移动端性能测试工具简述
(1) Xcode-Instrument
Instrument是Apple官方提供的一个强大的内置在xcode中的性能调试工具集。其中,Activity Monitor(活动监视器):监控进程级别的CPU,内存,磁盘,网络使用情况,可以得到应用程序在手机运行时总占用的内存大小;Core Animation(图形性能):这个模块显示程序显卡性能、CPU使用情况以及页面刷新帧率;Network:用链接工具分析程序如何使用TCP/IP和UDP/IP链接;Energy Log:耗电量监控。Instrument主要用于在调试过程中随时发现问题,及时优化,但是这个工具只能供有应用源码的程序员使用,无法测量用户真实使用场景下的性能。
(2) Android monitor
Android Studio内置了四种性能监测工具Memory Monitor、Network Monitor、CPU Monitor、GPU Monitor,可以使用这些工具监测App的状态。Memory Monitor工具主要是用来监测App的内存分配情况,判断是否存在内存泄漏;Network Monitor是用于显示App网络请求的状态;GPU Monitor工具可以将进行UI渲染工作所花的时间表现出来;CPU Monitor可以对代码中的方法进行检测。
(3) Matrix
Matrix是一款微信研发并日常使用的应用性能接入框架,支持iOS, macOS和Android。 Matrix 通过接入各种性能监控方案,对性能监控项的异常数据进行采集和分析,输出相应的问题分析、定位与优化建议,从而帮助开发者开发出更高质量的应用。数据监测结果存储到后台,没有直观的展示界面。Matrix-iOS/
macOS主要监控崩溃、卡顿和爆内存。Matrix-android监控范围包括:应用安装包大小,帧率变化,启动耗时,卡顿,慢方法,SQLite 操作优化,文件读写,内存泄漏等。
(4) GT
GT(随身调)是直接运行在手机上的"集成调测环境"。利用GT,仅凭一部手机,无需连接电脑,即可对App进行快速的性能测试(CPU、内存、流量、电量、帧率/流畅度等)、开发日志的查看、Crash日志查看、网络数据包的抓取、App内部参数的调试、真机代码耗时统计等。
GT支持iOS和Android两个手机平台,其中:
- iOS版是一个Framework包,必须嵌入App工程,编译出带GT的App才能使用;iPhone和iPad应用都能支持。
- Android版由一个可直接安装的GT控制台App和GT SDK组成。GT控制台可以独立安装使用;SDK需嵌入被调测的应用、并利用GT控制台进行信息展示和参数修改。
(5) Emmagee
Emmagee是一款实用、方便的性能测试工具,适用于指定的Android App,它可以监控CPU、内存、网络流量、电池电流和状态(某些设备不受支持)。此外,它还支持自定义收集数据的时间间隔,在浮动窗口中呈现实时进程状态等。
安装之后,打开Emmagee会显示出目前系统已经安装的应用(可在设置中配置间隔)。选择一个应用之后,点击"开始测试"按钮,Emmagee会自动启动被测应用,并在最上方显示流量、CPU、内存等数据,在该状态下可任意使用被测应用,Emmagee会自动进行相关数据的记录,终止测试之后会生成相应的报告,并保存在Android目录中。
(6) Soloπ
Soloπ是支付宝在移动端上实现的一套无线化、非侵入、免Root的 Android 专项测试方案。直接操控手机,即可实现自动化的功能、性能、兼容性、以及稳定性测试等工作。支持 CPU、内存、FPS、流量等常规指标的实时获取,同时支持将性能数据记录下来,存储到本地并通过报表形式展示,支持性能加压。
(7) Testin
Testin性能测试,通过自动化的测试工具,在上线前模拟正常、峰值以及异常等多种场景,从而对App的各项性能指标进行测试。包括:负载测试、压力测试、配置测试、并发测试、容量测试、可靠性测试。
- 负载测试:通过逐步增加系统负载,测试系统性能的变化,并最终确定在满足性能指标的情况下,系统所能承受的最大负载量。
- 压力测试:通过逐步增加系统负载,测试系统性能的变化,并最终确定在什么负载条件下系统性能处于失效状态,并以此来获得系统能够提供的最大服务级别。
- 配置测试:通过测试被测试软件的软硬件配置,获得不同配置的性能指标,用于选择最佳的设备及参数配置。
- 并发测试:测试多个用户同时访问同一个应用、同一个模块或者数据记录时是否存在死锁或者其他性能问题。
- 容量测试:在确定的软、硬件条件下,构造一定数量的虚拟用户访问,从而获取不同数量级别的服务器性能指标,以确定数据库能够处理的最大会话能力、最大容量等。
- 可靠性测试:采用系统能够支持的最大并发用户数,持续执行一段时间(7*24小时),通过综合分析执行指标、资源监控指标,来确定系统处理最大工作量的性能情况。
(8) Bugly
Bugly是腾讯推出的一款免费的崩溃收集工具。面向移动开发者提供专业的 Crash 监控、崩溃分析等质量跟踪服务。移动开发者 ( Android / iOS ) 可以通过监控,快速发现用户在使用过程中出现的 Crash (崩溃)、Android ANR( application not response) 和 iOS 卡顿,并根据上报的信息快速定位和解决问题。用户只要登陆 Bugly 网站,就可以清晰的看到被监测产品有多少 Crash,影响了多少用户的使用,并可以根据 Bugly 提供的 Crash 日志进行问题修复。
(9) OneAPM
Mi是OneAPM针对移动设备上App推出的移动应用性能监控工具。Mi展示移动应用的交互性能,崩溃率,HTTP 错误率,网络错误率等核心性能指标、用户访问轨迹、用户动作等行为数据,以及活跃用户等运营数据。从用户动作、网络请求、崩溃三个核心指标对用户体验进行评估,并结合应用版本、操作系统、设备、地域等多个维度总览用户分布情况。完整记录每个用户的访问轨迹,通过查看单次用户访问,回溯过程中出现的缓慢动作,错误请求和崩溃。详尽展示某类崩溃影响的设备、操作系统、应用版本、发生次数、影响用户等信息,还原崩溃发生轨迹,定位崩溃代码行。
(10) 听云App
听云App是听云平台提供的移动端性能监测工具。监控真实用户使用过程中的崩溃、错误、卡顿、网络性能差等问题。可以跟踪App应用移动设备端用户进行屏幕操作时的交互性能;统计多种错误类型,直观定位到具体报错URL、以及崩溃时的堆栈信息;可以深入追踪HTTP错误、网络错误和崩溃的原因,提高App质量。
5. 主流移动端性能测试工具横向对比
针对不同的产品迭代周期,选取了目前业内比较成熟的工具,对比各自的优缺点。
各工具性能指标覆盖情况对比如下表:
6. 结论
不同的移动端性能测试工具各有优劣势,在工具选择上,需要综合考虑主要监测的性能指标和工具的特长。对于研发测试阶段适用的工具,GT、Emmagee、soloπ在andriod端可直接安装apk进行测试,方便快捷。对于线上用户使用情况的监控,有些工具指标覆盖比较全面,但是对某些指标的监测不够深入,可考虑叠加另外一个或多个工具进行组合使用。