移动端APM性能监控

    你们好,很高兴能和你们分享下关于『移动端APM性能监控』的一些想法和实践。前端

    首先介绍下我本身,我叫徐宜生,如今是沪江高级Android开发工程师,《Android群英传》和《Android群英传:神兵利器》的做者,常常在CSDN上发表一些技术文章。这里是个人微信公众号,欢迎你们关注。android

    这里是出版的两本书,感兴趣的朋友能够看看。算法

    所谓『APM』,就是Application Performance Management的简称,咱们利用这个系统来对应用的性能、可靠性进行线上的监控和预警的一种机制。编程

如今App的开发技术相对成熟,而提高App的使用体验,就成了不一样App之间的一个竞争点。后端

    那么APM系统到底有哪些做用呢?服务器


    首先,咱们能够了解到线上App的实际使用状况,了解到App的奔溃、异常数据,从而针对潜在的风险问题进行预警,并进行相应的处理,例如发布补丁包、调整服务器策略等等。微信


    另外,了解App的真实使用信息,还有助于后端服务器了解客户端使用状况,根据不一样的策略进行服务端的架构调整,同时有针对性的提升App使用体验,提升用户使用黏性。网络

    APM其实是一个比较大的工程,这里咱们主要讲解客户端的实现,但仅仅是客户端的实现,就已经包含了不少咱们须要去解决的问题,例如:混合编程对性能数据采集的影响,采集程序对宿主App的性能影响、侵入程度、可拓展性和可定制性等等,同时Android的碎片化和iOS的一些封闭性,形成了不一样设备、不一样平台上的数据采集有不少的问题。架构


    另外,APM系统对后端的要求也比较高,例如:数据的采集汇总,分析处理,若是App的用户量比较大,对服务器的压力也是一个比较大的问题,毕竟性能数据的量会比较大。框架

    下面咱们来讨论下APM系统对App性能监控的几个维度。


    首先咱们来看看『内存』,内存的重要性相信你们毋庸置疑,它是对App性能的一个综合性反映,一般咱们会考虑到『内存峰值、内存均值、内存抖动、内存泄漏』这样几个方面,这几个考量维度综合反映了App在对象操做、内存使用是否合理、精简内存以及在内存泄漏上的处理是否恰当。


    在Android中,咱们能够经过Runtime来获取当前App所分配的内存信息,这也是或者实际内存信息最准确的方法。另外,咱们还能够借助『LeakCanary』来帮助咱们分析内存泄漏,将它集成到咱们本身的APM系统中,获取它的内存泄漏信息。

    『CPU』也是你们很是关心的一个方面,他主要影响了App的发热和卡顿,咱们主要经过『CPU峰值、CPU均值』来评判一个App对CPU的优化程度,在Android中,咱们能够经过读取/proc目录下的CPUInfo来获取CPU的一些性能信息。

    『启动时间』是你们比较容易忽视的一个点,如今App接入的第三方SDK愈来愈多,大部分都须要在Application中进行初始化操做,这就会极大的拖慢启动时间,这也是咱们优化的重点,关于App的启动优化,你们能够参考个人这篇文章一触即发——App启动优化最佳实践


    另外,启动优化也包括了页面的启动时间的考量,也就是页面的渲染时间,在Android中,咱们能够经过Choreographer和Activitylifecyclecallbacks来进行监听,同时,对于一些关键信息,经过使用AOP,咱们能够获取更加详细的信息。

    『UI性能』实际上在前一页中已经有所体现了,除了前面考量的页面渲染性能外,咱们对于『UI重绘、滚动帧率、页面ANR』也要进行详细的评测。这些东西,咱们能够借助开发者选项中的相关内容来进行测试。

    『耗电量』其实是App性能的一个上层表现,经过batteryhistorian咱们能够在内测阶段,分析App的耗电异常,在线上,经过监控App的使用和耗电,及时排除可能存在的异常。

    『网络性能』是一个App看不见的体验,国内网络环境错综复杂,要面对各类流量劫持和各类不稳定因素,因此,对于网络接口性能,也是咱们很是关注的点,例如『复杂网络环境、接口往返时间、接口数据异常、CDN、服务器异常』这些都是咱们须要考虑的。


    那么为了保证在使用APM系统的时候,可以下降接入的成本,因此这块咱们经过AOP方式来进行注入,避免大范围的改动。

    『用户行为路径』按道理来讲并不算是APM的范畴,可是经过用户行为路径的分析,咱们能够针对用户访问量大的内容进行集中力量的优化,有助于提升咱们优化的效率。

    APM系统监控的方式主要有两种,在内部测试阶段,咱们使用『PC端性能检测,它不影响性能,无需侵入代码,可测试竞品,可是需链接ADB』,在线上阶段,咱们使用『客户端性能检测SDK,它不受设备限制、可进行场测,但对宿主App代码有侵入、性能有必定影响』。

    有了采集的性能数据,咱们就能够对数据进行分析和展现了,对于这块,后端其实有不少成熟的方案,不少相似的数据展现图表控件,这里只举几个例子。

    这是借助Python的一些开源图表控件作的展现。

    这是借助ELK平台作的展现。

    这是借助ELK平台作的展现。ELK平台是一个很是好的数据展现框架,详细内容你们能够参考个人这篇文章ELK前端日志分析、监控系统

    前面咱们了解了现有APM系统的一些内容,固然,APM系统也是个与时俱进的系统,在现有的基础内容上,咱们还能作不少事,例如『AI分析数据Pattern、本地异常数据监控算法、异常数据预警机制、服务端指令控制』,这些也是咱们后面的奋斗目标。

本文分享自微信公众号 - Android群英传(android_heroes)。
若有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一块儿分享。

相关文章
相关标签/搜索