本系列文章根据手机淘宝客户端基础架构高级开发工程师非台在安卓绿色联盟开发者大会上的分享,共分三篇,介绍手淘技术团队性能和稳定性系统化提升方案 EMAS-MOTU 的设计原理以及实现思路。

本文重点介绍手淘高可用平台的定义及指标、自动化测试框架和性能稳定性数据平台。

详细信息请观看下方非台现场演讲视频

https://v.qq.com/x/page/r0804noxt9x.html

image

非台

手机淘宝客户端基础架构高级开发工程师

主要负责手机淘宝性能和稳定性的提升

高可用的定义及度量指标

移动端高可用定义

移动端高可⽤旨在通过设计关键的度量指标,以期望能够客观反映和量化用户在使⽤过程的真实感受,同时通过指标,建⽴一系列的工具和平台,从线下到线上快速发现、分析、定位和解决包括稳定性、性能、功能等各类问题,以进一步提升用户体验的系统化解决方案。

高可用度量指标

高可用度量指标由性能和稳定性两大度量指标组成。性能度量指标有七个维度,分别是卡顿率、启动时长、页面秒开率、帧率、ANR 率、流量、耗电;稳定性度量指标主要是 Crash 率,分为 Java Crash 率和 Native Crash 率。

image

自动化测试框架及性能稳定性数据平台

自动化测试框架

https://v.qq.com/x/page/e1353h0ff0l.html

以上为手机淘宝自动化测试演示视频。上半部分是测试同学的手势操作,下半部分是自动化脚本自动运行的效果。这套自动化测试框架的优点在于可以通过手势实时生成可执行的自动化脚本。将这套测试框架应用于暴力测试,通过不断重复回放同一个脚本去发现潜在的性能稳定性问题,包括内存泄漏、线程泄漏、资源泄漏等等。同时,手淘把常规的测试用例通过这套脚本去执行,可以很好地解决 P0P1 常规业务的回归。

性能稳定性数据平台

性能稳定性数据平台,由四个模块组成,用来展示各个维度的监控数据。

image

1.崩溃分析

主要是 Java Crash 和 Native Crash 分析,Java Crash 包含了 Crash 当时调用栈,当前页面、用户历史访问页面、当前内存水位以及 logcat 信息,帮助开发同学快速分析 Java 崩溃的原因,从而快速解决问题。Native 崩溃主要包含了崩溃的信号量、崩溃使用的调用栈、其他线程的调度栈、logcat 信息以及已加载的 so 信息,通过这些信息,可以让开发同学快速地发现 Native 崩溃原因。

2.异常分析

各个性能维度的指标会在这里展示,主线程卡顿主要是哪条消息超过了阈值,它的调用栈是什么样子的。ANR 展示的主要是/data/anr 下的文件信息,发生 ANR 的现场是什么样子的。主线程 IO 这块展示的是主线程操作 IO 的一些调用栈以及它的耗时。内存泄露这块分两部分,Java 泄露组件的名称,Native 泄露的 so 名称,通过这两部分可以快速地定位内存泄露的原因。资源泄露这块主要展示开发同学调用资源 open 时的调用栈信息。

3.性能 APM

启动性能监控了用户点击图标到真正进入页面可视可交互的时间。页面性能是从点击页面图表到下一个页面真正可视可交互的时间。系统监控启动所有阶段子任务的耗时,通过数据变化决策版本的发布是否符合质量标准。如果符合质量标准,可以发布;如果不符合,再进一步分析子任务耗时,具体是哪些任务导致不能正常发布。快速地定位分析,最终解决问题。手淘把数据能力开放给各个业务,通过他们个性化的需求自定义配置性能报表。

4.远程工具

远程工具主要是针对特殊用户的特殊案例。当线上用户向舆情平台反馈设备存在某一个性能问题时,通过这个工具,快速地从用户那里获取远程日志、Dump 内存和每个方法的耗时,快速分析原因,从而给出解决方案。

在高可用的背后,手机淘宝技术团队是如何进行性能及稳定性治理?EMAS-MOTU 在开发的各个流程如何为手淘提供高质量保障呢?我们将会在后面的文章中进行分享,敬请期待!


↙↙↙阅读原文可查看相关链接,并与作者交流