背景
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在有些方面有些不足,比如场景化性能数据,需要后续不断探索和优化,欢迎感兴趣的同学和我们一块交流。
以上所述就是小编给大家介绍的《移动端WAPM性能监控原理浅析》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Algorithms for Image Processing and Computer Vision
Parker, J. R. / 2010-12 / 687.00元
A cookbook of algorithms for common image processing applications Thanks to advances in computer hardware and software, algorithms have been developed that support sophisticated image processing with......一起来看看 《Algorithms for Image Processing and Computer Vision》 这本书的介绍吧!