防劣化的有几个难点:一是劣化检测的准确率和召回率,为了更多更准确的发现劣化;二是劣化的准确归因,发现劣化之后,如果不能精准的指出劣化的原因,需要投入比较多的人力资源和时间定位劣化原因,影响劣化解决的效率;三是劣化的修复,如果是比较严重的劣化,可以采用阻塞发版限期解决的方式,是比较容易推进解决的 。但是从抖音的实践来看,当启动优化到了深水区之后,优化的速度已经比较缓慢,需要关注几十毫秒级别的劣化了,假设我们解决了一二两个难点,发现了这些轻微的劣化,但是如何推进业务去解决这些小劣化也同样是一个难题 。我们需要能够量化出这些劣化对业务的影响,针对不同的劣化量级,和业务对齐优先级,确定标准的劣化修复流程,才能够保证劣化不会被带到线上影响大盘用户 。
防劣化是一个长期的工作,抖音投入已经有一年多了,目前整体效果还不错,在这个过程中也积累了比较多的经验,之后会专门写一个抖音的防劣化系列文章来给大家介绍我们的技术成果 。
启动优化工具古人云“工欲善其事必先利其器”,在启动性能优化领域也是一样,我们不仅需要趁手的工具来定位优化耗时问题,还需要尽量自动化的工具来持续发现劣化问题,也就是说整个启动优化在“攻”和“守”的两大方面均需要工具的辅助 。那么下面将针对这两部分的工具分别进行介绍及分享抖音在启动优化工具方面的探索:
线下分析工具这部分主要针对业界常见的 APP 性能探测工具进行基本原理解析及优缺点对比,具体包含的工具有:TraceView、CPU Profiler、Systrace,此外还将提及抖音自研的“抖音Android性能优化:新一代全能型性能分析工具Rhea”:
- TraceView:Instrumentation 模式下采用 AddListener 的方式注册 MethodError、MethodExited、MethodUnwind 的回调来采集方法起止时间;Sampling 模式下使用一个 SamplingThread 定时主权线程堆栈,通过对此的堆栈对比近似确定函数的进入和退出时间;虽然是官方提供的工具,但两种模式本身都存在比较大的性能损耗,可能带偏优化方向;
- CPU Profiler:整体通过 JVM Agent 实现,具有完成方法调用栈输出,且支持 JAVA、C/C++方法的耗时检测,上手比较简单,但其同样存在性能损耗较大的问题,且一般仅用于 debug 包,release 包需要额外添加 debuggable 的配置;
- Systrace:基于 Android 系统层的 Atrace 实现,Atrace 又基于 linux kernal 层的 ftrace 实现,ftrace 在内核中通过函数插桩获取耗时;其自身性能损耗比较低、数据源丰富且具有较好的可视化页面,但其默认监控点较少,在 APP 自有代码中的监控点需要手动加入,比较麻烦;
- RheaTrace:这是抖音基于字节码插桩结合 Systrace 及 Atrace 自研的工具,其具有自动加入监控点、各类耗时信息全面、性能损耗低等特点,是抖音日常在线下实施性能优化时首选的工具,其细节详见抖音Android性能优化:新一代全能型性能分析工具Rhea,这里不再赘述 。
除了 RheaTrace 之外,还有一些特定场景的小工具,比如线程分析工具、内存分析工具、高频函数分析等 。由于篇幅有限,就不在这里一一介绍,后面会有专门的系列文章来介绍 。
线上监控工具上面介绍启动优化方法论的时候我们提到了,不能只是看线下的性能分析,线下的分析结果并不能完全代表线上大盘用户的情况 。我们分析线上的性能数据,一方面能够验证我们的线上优化效果,另一方面能够从线上多个维度的数据里指导后续的优化方向 。
线上监控工具和线下的差异点主要在低性能损耗和兼容性,我们将 RheaTrace 做了改造,使其能够满足线上的监控要求 。性能损耗上,我们将监控的性能损耗控制在 1%以内,包大小控制在 200KB 以内,基本实现了线上全量用户的启动耗时监控 。通过启动路径的全量插桩,可以针对启动路径的各个阶段进行监控,一是可以发现线上用户哪些任务比较耗时,可以针对性的优化,让更多用户受益;二是可以监控线上的启动任务,如果发生了耗时增加,那么说明有劣化,这比监控到启动时间的劣化,要更容易定位到原因 。除了线上的全量慢函数监控之外,我们的线上启动监控还会细化IO、锁、GC等多种维度的耗时数据,帮助定位线上为什么耗时慢,提供新的优化方向 。
推荐阅读
- 抖音运营如何分析对标账号,对标账号我们都需要分析哪些数据
- 玩转抖音平台的算法推荐逻辑
- 抖音流量这么大,如何简单有效的获取精准客户?
- 抖音SEO是什么?揭秘抖音搜索算法工作原理和推荐算法
- 2021抖音电商年度数据
- 提高 JavaScript 性能的 12 个技巧
- 抖音账号无故被限流,你可能已经踩了这4个坑,建议自查!
- 新申请的抖音账号怎么上热门,怎么才能获得更多的流量推荐?
- 抖音新号0粉如何赚钱?
- 抖音账号被限流,原因为何?有哪些补救措施?
