采访嘉宾|杨凯
作者|冉叶兰
在移动互联网时代,因为设备资源存在受限情况,且网络也不稳定等因素,所以 Web 端和移动端的性能优化就显得特别重要。要是性能不佳,用户就容易流失,尤其是 ToC 的产品。体验差的产品肯定会被市场淘汰。怎样做好性能优化是每个企业都会予以关注的。
GMTC 全球大前端技术大会将于 11 月 24 - 25 日举办。在这个大会上,快手的性能优化负责人是杨凯。他将会分享《快手 APM 平台建设与性能优化》。他称,快手 App 的功能日益增多,这使得 App 的性能遭遇了严峻的考验。像 App 变得越来越卡顿、内存占用持续增大、包大小不断攀升等各类问题,都对用户体验产生了严重的不良影响。在会前,我们采访了杨老师,接下来一起看看快手是怎样应对性能挑战的。
快手 APM 指标监控平台的建设背景是什么呢?目前它的发展现状又是怎样的呢?
杨凯说:APM 是专门为快手的性能检测而打造的一个监控平台。它的建立背景主要包含两个方面。其一,有许多用户反馈在使用我们的 App 过程中,遭遇过卡顿、闪退以及发热等问题。其二,我们通过对现有数据进行分析,得出了这样的结论:性能对于用户的活跃度有着重要的影响。
目前,我们已经基本完成了关于崩溃、内存溢出(OOM)、应用无响应(ANR)、卡顿、启动、帧率(FPS)以及包大小的线上监控和线下监控。电量监控和流量监控正在开发之中。在线上方面,我们具备天级的监控以及小时级的监控,并且对于重点指标有着完善的报警机制。对于包的大小以及启动等方面,我们构建了一套专门的实验室环境。通过这个环境,我们能够监控到每一个 mr( )所引发的变化,同时也能够监测到日常迭代过程中的劣化情况。
APM 主要用于解决我们所面临的各类稳定性和性能方面的问题。其效果十分显著,具体表现为:
:你们在搭建指标监控过程中遇到哪些难点?是怎么解决的呢?
杨凯说:APM 能够做的事情颇为繁多,很容易铺展开来变得很广泛,然而在每一个方面都难以做得深入透彻。另外,尽管大家都认识到性能是重要的,但倘若没有数据作为支撑,就容易陷入那种到处忙于救火却看不到实际成绩的窘迫境地。所以我们参考业内经验,依据数据分析来得出重要程度。接着评估每个方向的优先级,逐个突破,抓住重点。我们力求每一点都做到极致,并且这种极致能够在用户数据上得到充分体现。
我们是一个音视频软件,在内存使用方面,尤其是 C++申请的内存,使用量会比较大。内存泄露、OOM(Out Of ,内存溢出)以及地址空间不足等问题表现得极为突出。业内现有的一些方案,对于我们而言,并不能完全适用,这就需要我们依据自身的实际情况,去开发相应的监控手段,以及解决这些问题的方法。业内有较为成熟的用于监控 C++内存申请与释放的 hook 方案,但要更好地解决我们的问题,我们还需知晓哪些内存是不可达的,以及哪些大块内存被长时间持有。
另外,我们在线上察觉到的性能问题,一般不是仅靠我们性能组就能独自解决的,需要推动各个业务方协同配合来解决。这些工作会给大家日常的开发工作增添额外的负担,然而它对我们的产品体验有着极为重要的影响。所以,一方面我们尽量把工具完善好,上报更多且更全面的数据;另一方面我们要将大家视为一个整体团队,共同享受项目的成果。
:内存优化过程中遇到的问题是如何解决的?
杨凯称:我们拥有一套属于自己的方法体系。这套体系包含定义问题、对问题进行分析、解决问题、对成果进行验收以及防止出现劣化等环节。
在开始阶段,首先要对问题进行量化。比如对于用户卡的问题,就需要明确什么叫做卡,以及怎样去监控用户卡。
:怎么进行内存优化?
杨凯称,内存主要由 Java 和 C 两部分构成。在 Java 方面,他们研发出了一套方案,能够实现线上裁剪、分析以及上传用户本地镜像的功能。当用户内存不足时,此方案可以迅速且准确地上报当时的 Java 内存状态,初步能够判断出泄露的情况以及内存大户是谁。上报之后,他们会对所有用户的信息进行汇总并展示。Java 部分的内存监控主要做了以下几点:
我们主要利用编译器插桩以及 hook 来记录 C 的内存中所有活着的内存块。利用 mark-and-算法在单独的进程中分析测试应用进程 Heap 中不可达的内存块。然后将发现的不可达内存上报给后台。具体操作如下:
:如何优化卡顿?
杨凯说:我们所定义的卡顿情况是,一个消息或者一个任务在主线程进行执行,并且这个执行时间超过了 1 秒。
优化主要从卡顿的堆栈特征、当前 CPU 占用以及其它线程正在执行的任务这几个方面来看。通常存在以下几种情形:一是 CPU 占用过高,通常是主线程或者子线程的任务较重;二是主线程在等锁,这时候需要查看其它线程当时的任务;三是系统服务繁忙,即调用耗时较长。解决方案通常需要将场景和页面相结合,增添 log 等内容,使上报信息更加丰富,以定位主要问题,或者减轻 CPU 占用情况。
:在启动优化这部分做了哪些动作,优化前后对比效果如何?
杨凯启动优化工作,主要是建立启动框架。把启动的所有任务,都收拢到这个框架之内。对每个任务的耗时以及它们相互之间的依赖关系进行统计。
启动优化定位问题:
优化手段:
另外,对于线上收集到的信息,着重对耗时较多的任务进行优化。在线下,利用 等工具来定位、验证并修复。接着,根据用户的不同特点,初始化不同的任务。比如,未登录用户无需初始化拍摄相关任务。我们第一期的优化效果达到了 40%,后续几期的优化也取得了良好的效果。用户侧获得了明显的收益。对于用户(特别是新用户而言),展示量为 0,滑动次数为 0,播放次数为 0,并且留存等数据都有极大的提升。
嘉宾介绍:
杨凯是快手的技术专家,担任客户端性能稳定性负责人。他在 2017 年加入快手,曾先后负责快手海外版以及性能稳定性方面的工作。如今,他主要负责快手双端的稳定性和性能优化,致力于提升快手的可用性与易用性,以提高用户使用的满意度,为公司的高速发展提供保障。他的团队成员都来自一线互联网公司和主流手机厂商,对核心技术有着深入的理解且拥有丰富的经验。
大会现在有 8 折优惠进行报名,还能限时立刻减免 960 元!想要查看更多大会的详细情况,可以扫描下面的二维码,也可以点击【阅读原文】。如果有购票方面的咨询,可以联系票务经理鱼丸,其联系方式是(同微信)。
点个在看少个 bug
版权声明:本文为 “博览广文网” 原创文章,转载请附上原文出处链接及本声明;
工作时间:8:00-18:00
客服电话
0755-88186625
电子邮件
admin@lanyu.com
扫码二维码
获取最新动态