APP下载

移动端WAPM效能监控原理浅析

消息来源:baojiabao.com 作者: 发布时间:2024-05-17

报价宝综合消息移动端WAPM效能监控原理浅析

​背景

58内部在相容性测试、稳定性测试、H5、资源检查和安全测试等测试方向已经覆盖,对于移动端效能测试却较少涉及。效能资料大多数依赖于测试人员手工测试收集,效能资料分散,有效效能资料难以提取,研发难以定位问题所在,而且依赖测试人员手工收集效能资料,效率低下,覆盖率低,人力成本比较高。通过注入SDK的方式,可以获取更多更全的效能资料,一次接入,无感收集,APP在手工测试、自动化测试、回归测试中产生的效能资料都可以持久化储存到web后端数据库,于是WAPM效能监控平台诞生了。

业务结构

WAPM效能监控业务结构大致可以分为四个部分,使用者层、接入层、应用层和资料层,如图1。使用者层负责产生互动资料,接入层负责收集效能资料并简单处理发送给后端,应用层负责资料接收、资料清洗、资料聚类、效能评测和bug自动提交,资料层负责资料持久化储存。资料获取是WAPM监控平台的基石,本文主要介绍接入层实现原理。

图1. WAPM效能监控业务结构

WAPM SDK 效能专项原理

01 内存泄漏

WAPM检测内存泄漏是通过整合LeakCanary的方式,其原理是通过application.registerActivityLifecycleCallbacks来系结Activity生命周期的监听,从而监控所有Activity; 在Activity执行onDestroy时,开始检测当前页面是否存在内存泄漏,并分析结果。那判断被检测物件的确存在内存泄漏的依据又是什么?KeyedWeakReference与ReferenceQueue联合使用,在弱引用关联的物件被回收后,会将引用新增到ReferenceQueue;清空后,可以根据是否继续含有该引用来判定是否被回收;判定回收, 手动GC, 再次判定回收,采用双重判定来确保当前引用是否被回收的状态正确性;如果两次都未回收,则确定为泄漏物件。内存泄漏检测上报流程图如下:

图2、内存泄漏上报流程图

02 UI执行绪卡顿

Android中界面重新整理都在主执行绪中进行,主执行绪阻塞则会丢帧,丢帧过多则会出现卡顿现象。UI的更新都是通过讯息机制来处理的,在主执行绪中,系统为我们初始化了Looper 。检视Looper.java源代码,可以知道系统api提供了Printer物件,当Printer不为空时,可以在dispatchMessage执行前后回拨,如此便可以获得下图中的T1和T2,其差值的绝对值越大,丢帧就越多,丢帧30以上人眼就会被人眼识别。当耗时时间超过阀值时,可以获取栈资讯,定位到具体耗时程式码块。

图3. UI卡顿检测流程图

03 网络监控

WAPM网络监控是通过Hook的网络框架的方式获取网络请求资料。APP接入sdk后,当APP进行网络请求时,就会触发hook回拨函式,将Request资讯和Response资讯存在本地数据库,定时上传。对于获取到的网络请求资讯,我们对其分析处理,归类出网络大图片和错误url,提醒开发者优化或者修复。

图4. 网络框架hook流程图

04 页面测速

页面载入太慢往往给人不好的体验,在Android中,Android 4.0以上的版本可以利用ActivityLifecycleCallbacks来实现对生命周期的监听,但是没有Fragment生命周期监听,View绘制和Layout载入也没有测速api,于是我们采用hook的方式来监控Activity、Fragment的生命周期以及ViewGroup的dispatchDraw方法,通过维护一个页面pageList,然后通过物件hashCode和生命周期函式的执行时间来归类资料。如将页面物件资料存成一个pageList,当一次绘制完成后,我们先检查此绘制是否为前一个页面的绘制资讯,是则将此绘制资料add到之前页面物件中,否则该绘制资讯是新页面的绘制资讯,如图5。

图5. 页面耗时资料组合分析流程图

几个时间点:

Activity启动时间(从Instrumentation.execStartActivity执行开始到Instrumentation.callActivityOnResume执行结束) Fragment启动时间(从Fragment的onAttach执行开始到Fragment的performResume执行结束)View绘制时间(ViewGroup的dispatchDraw方法执行开始到递回结束)Layout构建时间(inflate函式执行时间)

总结

本文主要介绍了WAPM业务架构、WAPM效能专项原理和WAPM在业务线的实践,WAPM实现了Android移动端部分效能资料监控,能够自动化发现效能问题,提交效能bug,问题严重程度分级,让研发专注解决较为严重的效能问题,帮助研发复现和定位问题瓶颈所在。目前WAPM已有9款APP接入使用, 已经取得不错成效。在实际使用中,我们发现WAPM在有些方面有些不足,比如场景化效能资料,需要后续不断探索和优化,欢迎感兴趣的同学和我们一块交流。

欢迎大家关注“58架构师”微信公众号,定期分享云端计算、AI、区块链、大资料、搜寻、推荐、储存、中介软件、移动、前端、运维等方面的前沿技术和实践经验。

2019-09-25 16:59:00

相关文章