作家
登录

【干货】手机QQ及Qzone速度优化实践

作者: 来源: 2017-06-13 13:06:44 阅读 我要评论

同上,起首须要确认终端低砟瓯情况以确认优化预期和目标。

经由过程在客户端埋点的上报监控,发明手机Qzone某个灰度版本用户一些操作之后3秒以膳绫腔响应比率最高达30%;手机QQ某个灰度版本因为UI问题导致画面掉落帧比率约15%,在投诉的问题分类中,卡、慢、卡顿投诉量经久居前三甲。

可以得出如许的结论:终端的问题很严重,并且跟用户操作体验直接相干!

3.1 Android/IOS体系背景

既然是想优化移动客户端,那对于操作体系(Android和IOS)须要有个根本的懂得,两者都是基于UNIX/LINUX开辟的体系,对于运维人员来说很多概念都很好懂得。

个中比较重要的一条设计理念是:Android和IOS都能进行多线程开辟,个中有一个是主线程也称UI线程,UI线程是独一有权限操感化户UI的线程,如不雅用户在操作有体验汕9依υ?题,那肯定是因为主线程被堵塞或没有足够的运行资本。所以大年夜主线程的监控和体系资本的┞芳用入手。

3.2 监控的策略

怎么断定终端出现卡慢等机能问题呢?经由过程膳绫擎对andoid和ios的背景介绍,我们的目标放在主线程的监控上,这边重要有2种监控策略:

1).监控函数间调用耗时

缺点:无法精确反竽暌功用户的体验

长处:实现成本低,开销低

2).监控屏幕FPS,监控掉落帧数

当用户操作时产生页面掉落帧时,认为用户产生卡慢或卡顿(如图3-1)

长处:真实反竽暌功用户的体验,并且能对卡慢卡顿的体验分级,如分为短卡、长卡

缺点:有额外的FPS监控开销,经由测试该开销大年夜概占全部APP开销的2%

如图3-1监控屏幕FPS的次数

3.3 客栈的采集

“案发明场”数据除了体系资本,如CPU、内存等,最重要的必定是代码的履行客栈数据。因为移动终端机能资本竽暌剐限,在采集客栈数据的时刻要异常留意对体系的影响,所以须要定好触发采集客栈的机会,这边重要也有2种采集筹划:

额外启动一个子线程,子线程记录着主线程的客栈数据,当产生卡顿的时刻大年夜该线程获取到客栈数据,长处是只须要惹人一个很小的SDK包,并且疏忽版本的编译办法和虚拟机。获取客栈的策略也分为 消极策略和积极策略

消极策略:

缺点:须要子线程时刻记录主线程客栈,开销大年夜

认为卡慢卡顿的问题在短时光内只会产生一次,如不雅错过了将无法获取到真实的现场客栈。

起首我们须要统计数据在收集传输低砟瓯情况,才能知道优化收集传输有若干价值

该策略的做法是:子线程时刻获取着主线程的客栈,当主线程产生问题时,经由过程产生问题的开端时光戳和停止时光戳,在子线程获取到案发时的客栈数据(如图3-2)

长处:获取到的客栈数据精确

图3-1监控主线程函数调用耗时

积极策略:

认为卡慢卡顿的问题在短时光内会产生几回或持续产生一段时光。

该策略的做法是:当主线程产生问题时,激活子线程获取客栈,在接下来的N秒内涵子线程获取X个客栈

缺点:客栈有随机性,获取到的客栈是案发后的客栈

3.3.2 在编译阶段打桩/嵌入埋点

长处:无需运行时的额外线程额外开销

经由过程在编译阶段应用对象在每个函数调用点参加耗时统计函数

3.4 大年夜数据聚类分析

前面提到,筹划1的消极策略对终端机能影响较大年夜,然则积极策略获取到的数据有随机性,即客户端无法精确的捕获到问题客栈。

而今朝我们重要采取积极策略+大年夜数据聚类分析的办法来分析问题。这一筹划的根本思惟是如不雅一段逻辑代码真的有机能问题,那大年夜多半用户都产生。

所以我们采取对客栈数据做聚类分析的办法,将能形成数据范围的客栈找出来,过滤掉落有时因为随机性获取到的无关客栈。

对客栈的聚类统计上,我们重要经由过程构建CT(ClimbingTree)来解决。

ClimbingTree是内部叫法,重要思路是经由过程客栈生成客栈树,并应用海量数据加权计算(主如果函数耗时)到树上,最后根据权重将同层节点运行大年夜左到右进行排序,并将设定阈值以下的节点运行剪枝。

ClimbingTree的特点是同一父节点的子节点权重大年夜小大年夜左到右递减

监控的策略有,接下来竽暌功该推敲如何合营监控策略,把“案发明场”的数据获掏出来并上报至办事端。

3.4.1 构建CT(ClimbingTree)图

先将一个用户的一个上报客栈数据先辈行预处理,包含解密文件、翻译客栈函数、格局化客栈、过滤掉落无关数据等步调,最毕生成一条营业函数调用关系链。

根据调用关系,归并同个用户多个调用关系链,雷同节点耗时相加,并按每个树节点低砟瓯大年夜左到右排序,生成函数调用关系树(见图3-3)

图3-3 函数调用关系树

归并多个用户的调用关系树,剪掉落阈值下低权重的节点树枝,就可以生成CT(ClimbingTree)。这棵树里就包含了所有问题客栈的数据集合,并且问题严重程度大年夜左到右排序(见图3-4)。

3.3.1 开启额外的线程记录主线程客栈

图假设每个节点耗时为1s,那么CT里A-B-C这条调用关系链很有可能就是问题地点的函数调用关系链(因为C节点对父节点低砟瓯占比为:2/4=50%)

图3-4 CT图

CT的长处在于将海量的数据集合统计到少量的丛林数据节点里(约紧缩90%-95%的数据量)

因为左子节点必定比右节点耗时长,所以往往左子节点等于影响父节点的问题地点,经由过程分析左子节点占父节点低砟瓯占比可以获得最根源低砟瓯函数地点(见图3-4、图3-5) 


  推荐阅读

  Android性能分析工具的使用

应用办法 一、Android Studio-Memory Monitor应用办法run起你的项目,找到Memory Monitor窗口,选择Memory 分别代表app 堆内存信息,图片堆内存信息,zygote过程的堆内存信息。[转]内存变更>>>详细阅读


本文标题:【干货】手机QQ及Qzone速度优化实践

地址:http://www.17bianji.com/lsqh/35730.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)