手机卫士性能监控实践

前言

随着移动互联网的发展,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的技术方案,未来计划开源,献给开源社区,在开源大家庭中贡献我们的一份力量,敬请期待!

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20171215G0VDX400?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券