抖音 ANR 自动归因平台建设实践
内容提要
本文介绍了抖音在ANR问题治理上的挑战和建设ANR归因平台的思路,包括单点归因、聚合归因和劣化问题归因三个方向的建设思路。文章还介绍了平台的落地效果和未来规划。
延伸解读
从传统归因到平台化:ANR 治理的范式转变
文章指出,传统基于 ANR Trace 和 ANR Info 的归因方案存在明显缺陷:由于消息队列的时序性,ANR 发生时的堆栈可能已错过问题现场,导致归因不准确。慢消息归因虽能监控主线程消息,但面对抖音这类大型应用,ANR 常由子线程 CPU 抢占、内存不足等综合因素引发,单一方案难以定位根因。抖音构建的归因平台,通过单点、聚合、劣化三个方向,将归因从依赖人工经验转向系统化、自动化,这反映了超大型应用稳定性治理的必然趋势。
精准插桩与数据拟合:平衡监控开销与定位精度
为降低插桩对包体积和性能的影响,抖音采用精准插桩策略,仅对带有耗时特征的函数(如含锁、Native/IO 调用、复杂大方法)进行插桩,减少约 90% 的插桩数量。同时,针对插桩堆栈信息不足的问题,设计了插桩与抓栈数据拟合方案,在服务端根据时间点对齐并补全缺失的堆栈。这一思路在工程上具有参考价值:在线上监控中,如何以可接受的性能损耗获取足够的诊断信息,是大型应用普遍面临的挑战。
精细化数据:从“函数慢”到“为什么慢”的关键
文章强调,仅知道函数耗时并不足以解决问题。例如,一个业务函数耗时,通过补充锁竞争信息(如持有锁的线程和堆栈)才能明确根因。因此,平台在 Trace 数据之外,还采集了锁、CPU-Time、Binder 调用、IO 路径、RenderNode、Block GC 等精细化数据。这提示我们,ANR 归因不能止步于堆栈,上下文信息的丰富程度直接决定了归因结论的可消费性。对于开发者而言,在优化时也应关注这些底层细节。
聚合归因与业务特征:从单点修复到系统性治理
平台通过聚合归因标签(粗归因、细归因、业务特征)和异常问题(主线程异常函数、后台任务、内存),结合渗透率、耗时均值等统计维度,帮助团队聚焦 Top 问题。例如,案例中发现某个后台任务执行时机变更导致锁竞争,或业务 Bug 引发高频消息。这种从单点归因到大数据聚合的转变,使得治理从被动救火转向主动发现共性问题,从而提升整体 ANR 率下降的效率。
Q&A
抖音的ANR问题是什么?
ANR是Android系统定义的应用程序无响应异常,严重影响用户体验。
抖音在ANR问题治理中面临哪些挑战?
抖音面临缺乏有效归因手段、存量问题优化困难和防劣化压力等挑战。
抖音的ANR归因平台建设思路有哪些?
建设思路包括单点问题归因、聚合问题归因和劣化问题归因。
单点ANR问题归因的步骤是什么?
单点ANR问题归因分为明确问题区间、粗归因和细归因三个步骤。
抖音的ANR归因平台落地效果如何?
平台成功发现并修复多个ANR问题,降低ANR率,取得了显著的业务收益。
抖音未来在ANR治理方面有哪些规划?
未来规划包括持续优化归因体系、防劣化体系和专家系统。