前言
随着移动互联网的发展,APP的性能也越来越受到关注,APP的运行性能也在一定程度上决定了一个APP是否能快速成长的一个决定因素。
360手机卫士,作为一款拥有数亿用户的超级APP,底层基于自己的RePlugin开源框架,是一个拥有上百个插件的工具类超级APP。本文将给大家介绍360手机卫士是如何搭建自己的性能监控系统的,又如何在实际中解决性能问题的。你将了解到一个超级APP是如何通过线下、线上等性能监控手段对APP性能进行监控,提升用户体验的。
APP的性能问题有哪些?
首先我们来思考一下APP都会存在哪些性能问题,大体可以分为以下几个方面。
手机卫士性能控制系统
360手机卫士的性能监控系统,主要分为线下、线上、其他3个部分。
线下场景
1.代码红线
代码红线主要包括:代码规范、Lint、Findbugs、包大小监控等几个方面。
手卫有自己的一套严格的代码规范,可以保证编程过程中的一些低级错误,以及编码风格的统一,代码的可读性也得到了很大的提高。
Lint静态代码扫描,可以帮助我们发现静态代码的一些漏洞,例如,在手卫的编译打包平台,我们通过自定义Lint规则,在插件编译时进行代码扫描发现过度绘制的问题,以此来彻底规范解决手卫的静态过度绘制问题。
自定义的Findbugs规则也帮助我们找到一些诸如存在对象引用导致的内存泄漏等问题。
2.Argus APM Debug模式
Argus APM Debug模式是基于Argus APM开发的给开发和测试使用的性能工具,可以帮助开发人员在开发调试解决发现性能问题,同时可以帮助测试在测试阶段发现性能bug。
Argus APM Debug模式具有以下几个特点:
性能数据实时采集
实时本地化分析
警告信息提醒
性能问题可追溯
多进程显示
对接性能BUG
debug模式流程图:
Argus APM Debug模式在APP运行时,实时进行性能监控和分析,如果发现存在某种性能问题,会实时提醒开发和测试人员,并且会把分析结果以日志的形式存储到SD卡,方便问题追溯。
3.测试
严格的测试流程可以帮助我们在上线之前发现绝大多数的bug和性能bug。手卫的测试分为功能测试和自动化测试,功能测试用来保障业务功能的正常稳定,自动化测试帮助我们发现可能存在的性能方面的问题,例如功耗、稳定性等问题。完整的自动化测试流程,对于一个APP在性能和稳定性方面的提升会有很大的帮助。
线上性能监控场景
1.崩溃后台
实时收集崩溃信息,经过计算hash进行分类,然后统计出每个crash相对应的崩溃次数。针对新增崩溃、突然增长的崩溃,我们通过邮件预警系统进行自动预警,保证了突发状况的及时发现。通过我们的crash后台,跟进top crash排名,我们还会定期的专项解决top crash的问题,以此来降低手卫整体的崩溃率。
2.Argus APM性能监控平台
Argus APM是手卫自主开发的一套移动端线上性能监控平台,可以帮助APP进行各种性能数据的采集、分析,以此来发现性能问题,帮助APP提升用户性能体验。
Argus APM有以下几个特性:
非侵入式、监控全面、支持插件监控、云端灵活控制、支持定向用户开启APM、具有实时收集、实时分析的能力、数据平台展示多样、Argus APM Debug模式(帮助发现线下问题)。
ArgusAPM 监控模块
应用启动时间:采集app冷启动和热启动时间,解决启动时间过长的问题。
Activity生命周期时间:采集Activity生命周期时间,解决Activity交互耗时问题。
网络:采集网络请求性能数据,统计网络接口吞吐量,错误率等问题。
内存:统计app进程的内存占用情况,可以从机型、android版本等维度进行对比。
ANR:采集ANR错误,用于提升APP的稳定性。
卡顿:采集主线程卡顿信息,提升APP的交互体验。
进程信息:采集进行启动次数等信息,分析APP存活率等信息。
文件/数据库:发现APP自身的文件或数据库是否过大等性能问题。
IO:统计IO访问次数、耗时等情况,优化IO性能。
线程:统计线程使用情况,优化线程性能。
帧率:采集APP运行时的帧率,用于提升UI体验。
电量:针对360OS系统,采集APP电量信息。
传感器:分析传感器使用信息,发现耗电等性能问题。
cpu:统计APP的cpu使用率,发现功耗问题。
ArgusAPM 数据后台
特点:支持海量数据的查询和分析、实时返回查询结果、多维度筛选、实时警报。
通过Argus APM后台,可以很快的定位并发现各个性能模块是否存在性能问题,并且每个性能模块还可以进行多维度的性能数据对比,非常方便。我们的实时警报系统,可以对于超过警戒值的性能指标,进行及时的邮件预警,避免严重性能事故的产生。
其他方式(针对以上性能监控系统的补充)
手卫除了以上的方式来监控、改善性能,还有以下几个方面的补充,来发现一些遗漏(未发现)的问题。
1.诊断插件
针对于线上反馈用户,为了提高处理问题的效率,帮助用户快速解决问题,我们开发了诊断插件,用于解决特定用户的问题。
用户在客服人员的指导下,使用诊断插件,采集相关的性能等数据,可以非常快速的定位到问题的原因,并帮助用户解决了问题。数据通过用户上报之后,我们通过工具化的手段,进行数据的分析,以此来提高处理效率。
2.用户反馈后台
用户反馈后台,可以反映出某个时间段,反馈问题的趋势,可以发现一些其他性能监控工具无法发现的问题。
性能案例介绍
1.卫士自动退出问题
2.网络流量异常案例
3.异常耗电案例1
4.异常耗电案例2
未来方向
1.深度学习探索
结合深度学习、大数据等热门技术,应用到APP性能分析中,更好的提升手卫的性能。
2.自动化、工具化
使用自动化、工具化的方法,使我们的性能监控的各个留下更加方便、简单、实用,提升效率。
3.开源/共享
针对我们的Argus APM的技术方案,未来计划开源,献给开源社区,在开源大家庭中贡献我们的一份力量,敬请期待!
领取专属 10元无门槛券
私享最新 技术干货