您当前的位置:首页 > 电脑百科 > 程序开发 > 移动端 > APP

日活超过 3 亿的快手是怎么进行性能优化的?

时间:2020-06-18 18:13:27  来源:  作者:

在移动互联网时代,由于设备资源受限、网络不稳定等因素,Web 端和移动端的性能优化显得尤为重要,如果性能不好,用户就容易流失,ToC 的产品尤为明显,体验差的产品必然会被市场淘汰。如何做好性能优化是每个企业都会关注的。

在将于 11 月 24-25 日举办的 GMTC 全球大前端技术大会上,快手性能优化负责人杨凯将会分享《快手 APM 平台建设与性能优化》。他表示,“随着快手 App 功能越来越多,App 的性能也面临着严峻的挑战,诸如 App 越来越卡、内存占用越来越大、包大小不断增加等各类问题都严重影响着用户体验”。InfoQ 在会前采访了杨老师,我们一起来看看快手是如何应对性能挑战的。

InfoQ:快手 APM 指标监控平台的建设背景是什么?目前发展现状如何?

杨凯:APM 是我们针对快手的性能检测做的一个监控平台,其建立背景主要有两方面 , 一方面有很多用户反馈在使用我们的 App 时,遇到过卡、闪退和发热等问题;另一方面,我们从现有数据分析得出结论:性能对于用户活跃度有着重要影响。

目前,我们已经基本完成了崩溃、内存溢出(OOM)、应用无响应(ANR)、卡顿、启动、帧率(FPS)、包大小的线上、线下监控,电量、流量等监控正在开发中。线上的话,我们有天级、小时级的监控,并且重点指标有完善的报警机制。对于包大小、启动等,我们建立了一套实验室环境,可以监控到每个 mr(Merge request ) 导致的变化,以及日常迭代劣化。

APM 主要解决我们面临的各种稳定性和性能问题。效果非常明显:

优化了 40% 的启动速度,提升了我们的 0 播、留存等关键产品数据。优化了 23M 包大小,大大降低了我们新用户获取成本。两个优化,都获得了快手技术线的绩效提升奖。

日活超过 3 亿的快手是怎么进行性能优化的?

 

InfoQ:你们在搭建指标监控过程中遇到哪些难点?是怎么解决的呢?

杨凯:APM 可以做的事情很多,容易铺得很广,但每一点都做不透。另一方面,虽然大家都觉得性能重要,但如果没有数据的支撑,也容易陷入到处救火而看不到成绩得窘境。所以我们一方面参考业内经验、根据数据分析得出重要程度,评估每个方向的优先级,各个击破,抓住重点,力求每一点都做到极致,并且能从用户数据上得到充分的体现。

我们是一个音视频软件,所以对内存的使用,尤其是 C++ 申请的内存会比较多。内存泄露,OOM、地址空间不足等问题非常突出。业内现有方案对我们来说并不完全适用,需要我们根据自己的实际情况,开发监控、解决问题。业内有比较成熟的 malloc hook 方案监控 C++ 内存的申请、释放,但我们还需要知道哪些内存不可达,哪些大块内存被长时间持有,才能更好地解决我们的问题。

另外,我们在线上发现的性能问题,通常不是我们性能组能独立解决的,需要推动各业务方配合解决。这些工作会给大家日常的开发工作带来额外的负担,但它又对我们产品体验有很重要的影响。所以我们一方面尽量完善工具,上报更多更全的数据,另一方面我们要将大家作为一个整体团队,享受项目的成果。

InfoQ:内存优化过程中遇到的问题是如何解决的?

杨凯: 我们有一套自己的方法论,即定义问题、分析问题、解决问题、验收以及防劣化。

定义问题: 在最开始阶段,先将问题量化,例如用户卡,就需要定义什么叫卡,怎么监控用户卡?

分析问题: 我们会在收集到足够的用户数据后,分析用户实际的问题场景、原因。解决问题: 很多问题,并不是性能组可以解决的,但是我们可以提供工具定位、发现问题,推动相关开发人员解决。验收: 对于一些重要的优化,我们会通过 AB 上线验收效果,回收技术数据和产品数据(例如优化 FPS,我们会看相关页面 CTR 的变化)。防劣化: 我们会制定一些机制、方案,防止已经优化的数据在日常的迭代中劣化,包括每个版本灰度期间的监控、线下实验室环境测试、开发阶段提醒等。

InfoQ:怎么进行内存优化?

杨凯: 内存主要是 JAVA 和 C 两部分,对于 Java,我们研发了一套线上裁剪、分析、上传用户本地镜像的方案,可以做到用户内存不足时,快速而准确地上报当时的 Java 内存状态,初步可以判断出来泄露和内存大户是谁。上报后我们会对所有用户的信息做汇总、展示。Java 部分的内存监控主要做了以下几点:

内存镜像转储,我们研发了一种高效 dump 方案,解决了传统方法虚拟机内存转储需要暂停虚拟机的问题。内存镜像分析,研发了基于 shark 的低内存开销、低 CPU 开销的独立进程解析方案,采用了更为节省内存的高性能数据结构以及更为高效的内存索引,增加了同类型对象阈值用于 GC Root 最短路径搜索剪枝,可以在手机侧 10 分钟内完成 400M 镜像、200 万 对象的极端 case 解析。内存镜像裁剪,我们研发了一种 hook 虚拟机内存镜像转储时 IO 的高效裁剪方案,解决了传统裁剪效率低、成功率低的问题,辅以 zstd 压缩,90% 内存镜像可以压缩至 80M 内。

日活超过 3 亿的快手是怎么进行性能优化的?

 

C 的内存 我们主要利用编译器插桩及 malloc hook 记录所有活着的内存块,利用 mark-and-sweep 算法在单独的进程中分析测试应用进程 Native Heap 中不可达的内存块。将发现的不可达内存上报后台。具体操作如下:

利用编译器插桩及 malloc hook 记录所有活着的内存块(包含内存块地址、backtrace 信息),对性能影响较小。利用 mark-and-sweep 算法在单独的进程中分析测试应用进程 Native Heap 中不可达的内存块(包含内存块地址)。对于步骤 2 中收集到的不可达内存块,从 1 中获取其对应的 backtrace 信息,将泄漏信息上报至 APM 监控平台。APM 监控平台解析泄漏信息(backtrace 信息符号化等),做友好的展示,业务方根据 APM 展示信息可快速定位泄漏问题。

InfoQ:如何优化卡顿?

杨凯: 我们定义的卡顿是:一个消息 / 任务在主线程执行超过 1s。

优化主要看卡顿的堆栈特征、当前 CPU 占用、其它线程正在执行的任务。通常有以下几种情况:CPU 占用过高(一般是主线程或者子线程任务重),主线程等锁(需要看其它线程当时的任务),系统服务忙(binder 调用耗时长)。解决方案一般需要结合场景、页面,增加 log 等,丰富更多上报信息,定位主要问题,或者缓解 CPU 占用。

InfoQ:在启动优化这部分做了哪些动作,优化前后对比效果如何?

杨凯: 启动优化我们主要是建立启动框架,将启动所有的任务,全部收敛到框架内,统计每个任务的耗时、相互依赖关系。

启动优化定位问题:

将启动时运行的代码,按照功能,做成 task;线上收集每个 task 的耗时;在线下,在 Android 端利用 systrace、在 IOS 端利用自研的火焰图工具,来分析耗时。

优化手段:

优化整体流程;分场景、分用户特性,推迟甚至取消一些 task (根据用户登录状态,用户使用习惯,后面我们会用机器学习预测 task 是否需要初始化);特别关注一些锁的等待、主线程 CPU 分配不足等问题;一些系统 API,背后会引发一系列的初始化(setcookie,会引起 WebView 内核初始化);主动 dex2oat;二进制重排、dex 重排。

日活超过 3 亿的快手是怎么进行性能优化的?

 

另外,针对线上收集到的信息,重点优化耗时较多的任务。线下通过 systrace 等工具,定位、验证修复。然后依据用户的不同特征,初始化不同任务。例如,未登录用户不需要初始化拍摄相关任务。我们一期优化效果达到了 40%,后续几期优化,也收到了不错的效果。用户侧收益明显,用户(尤其是新用户)0 展示 、0 滑、 0 播放,以及留存等数据都有非常大的提升。



Tags:快手   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
这是厨房小白的福音,简单快手;简单几步即可做出美味可口的红烧肉不输饭店的大厨哦!用它不用炒糖色也不用配各种香料;简单易行!By 懿依坊 【豆果美食官方认证达人】 用料 五花肉 5...【详细内容】
2021-09-26  Tags: 快手  点击:(44)  评论:(0)  加入收藏
每经记者:温梦华 丁舟洋 每经编辑:董兴生“众所周知,B站是一个学习的APP”,这曾经只是粉丝们的一句调侃,如今已越来越成为现实。不仅是B站,快手、抖音,以及与抖音同属字节跳动的西...【详细内容】
2021-08-27  Tags: 快手  点击:(65)  评论:(0)  加入收藏
一、申请成为快手mcn机构 ,需要满足以下基本条件:1.拥有正规营业执照的实体公司/机构,且具有服务类的增值税专用发票资质。2.在自己内容领域持续产出优质内容。3.与旗下子账号...【详细内容】
2021-07-29  Tags: 快手  点击:(66)  评论:(0)  加入收藏
随着这股红利的诞生,目前市面上也出现了各路做抖音云控的公司,那么大家如何进行去选择呢,小编给大家列举了几个维度,大家可以根据这个标准进行去筛选,从而找到靠谱优质的公司进行...【详细内容】
2021-07-20  Tags: 快手  点击:(66)  评论:(0)  加入收藏
快手直播带货中要想创造更高的销售额就必须让用户清晰地感知到产品的价值,只有将产品的价值充分地展示给用户,用户才会产生购物需求,进而下单,完成整个转化过程。从展示产品特性...【详细内容】
2021-07-14  Tags: 快手  点击:(116)  评论:(0)  加入收藏
据了解,在商业化进程提速后,快手迅速成长为中国重要的数字营销平台,取得这一地位源于平台本身庞大的用户基数与越发多元化的用户结构数据显示,目前快手的日活跃用户数已经突破3...【详细内容】
2021-07-13  Tags: 快手  点击:(104)  评论:(0)  加入收藏
中国商报/中国商网(记者 冉隆楠)本地生活赛道竞争格局或迎来新的变化。近日,阿里巴巴集团董事会主席兼首席执行官张勇表达了持续投入饿了么的信心。此前,抖音和快手也都低调入局...【详细内容】
2021-05-25  Tags: 快手  点击:(69)  评论:(0)  加入收藏
抖音和快手作为现在国内最大的短视频平台,每天数以亿计的人们沉浸在其中,把人们的碎片化时间利用的淋漓尽致。但是由于两个平台本身定位不同,所以在各个方面也是有着不小的差...【详细内容】
2021-05-19  Tags: 快手  点击:(121)  评论:(0)  加入收藏
电商卖家都知道,新店开起来了首先就需要考虑接单发货的问题,但一般电商平台提供的都是把订单号导出到Excel,发货后把运单号填到Excel对应订单号列,然后又导入Excel匹配发货,非常...【详细内容】
2021-05-18  Tags: 快手  点击:(219)  评论:(0)  加入收藏
极速版最大的区别,当然就是软件大小要比正式版本小很多,功能上也进行了削弱。实际上目前主流的互联网企业,抖音、快手、头条、爱奇艺、百度、微博、知乎等等平台,都有自己的普通...【详细内容】
2021-04-02  Tags: 快手  点击:(189)  评论:(0)  加入收藏
▌简易百科推荐
  1、明确产品的需求分析+功能  这是最基本的也是第一步,我们要明确自己或者客户真的想要开发一款app应用,其次就要了解到底要开发什么功能什么类别和种类的app应用。所...【详细内容】
2021-12-27  木子科技    Tags:App   点击:(3)  评论:(0)  加入收藏
前言目前,即时通讯在app中逐渐成了不可或缺的功能,尤其是在疫情期间,音视频会议功能更是火了一把,但是想自己开发即时通讯功能,却一点都不简单,如果用原生开发的话,那么Android、iO...【详细内容】
2021-07-29  中控易动    Tags:APP   点击:(104)  评论:(0)  加入收藏
本篇博文将会提供一个关于如何使用WebRTC建立一个视频会议App的教程。我们不会将其设计的太复杂,它将会是一个简单的一对一视频会议App,并且仅仅使用了WebRTC APIs和一些其他...【详细内容】
2021-07-29  易简视源云会议    Tags:视频会议App   点击:(113)  评论:(0)  加入收藏
开发一款app需要多少钱?这是一个比较笼统的问题,没有确切的需求,拥有不同技术经验的团队往往报价都各不相同,因为不知道开发需求,所以无法给出一个准确的价格。因此,想知道app开发...【详细内容】
2021-07-13  hey衡道    Tags:app   点击:(79)  评论:(0)  加入收藏
Hybrid APP指的是半原生半Web的混合类App。需要下载安装,看上去类似Native App,但只有很少的UI Web View,访问的内容是 Web 。 原生是Native APP,H5就是Web App在Hybrid 当中,如...【详细内容】
2021-04-28  扣丁学堂  今日头条  Tags:APP页面   点击:(289)  评论:(0)  加入收藏
介绍MIP(Mobile Instant Pages - 移动网页加速器),是一套应用于移动网页的开放性技术标准。通过提供 MIP-HTML 规范、MIP-JS 运行环境以及 MIP-Cache 页面缓存系统,实现移动网页...【详细内容】
2021-04-12  爱分享Coder  今日头条  Tags:WebApp   点击:(309)  评论:(0)  加入收藏
在开发直播APP时,核心要素和基本要素是稳定性,一般各大服务商都有提供demo,并且可以免费测试的,测试可以初步评估下稳定性,看看视频流畅度如何,卡顿是不是很频繁,延时效果怎么样,视...【详细内容】
2021-03-19      Tags:直播APP   点击:(292)  评论:(0)  加入收藏
TOKEN作为用户身份凭证并不能保证数据安全,别人通过抓包等方式很容易拿到TOKEN,带上TOKEN请求我们的API接口就能获取数据;其实换一个角度想:我们只需保证即使TOKEN被别人冒用,也...【详细内容】
2021-02-18      Tags:APP,API   点击:(229)  评论:(0)  加入收藏
在当今移动互联网盛行的时代,网络的形态除了有线连接,还有2G/3G/4G/5G/WiFi等多种手机网络连接方式。不同的协议、不同的制式、不同的速率,使移动应用运行的场景更加丰富。目前...【详细内容】
2021-02-05      Tags:APP   点击:(201)  评论:(0)  加入收藏
虽然目前许多企业都进行了长沙APP开发,开始了移动互联网转型之路,但由于其中绝大部分企业都属于传统行业,对APP应用了解并不多,故而对开发工作也不是很清楚。为了大家能更好的了...【详细内容】
2021-02-01      Tags:APP应用   点击:(214)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条