APM线下性能归因实践(Anytrace)字节跳动 / 刘成清
线下工具的前世今生
线下性能归因工具经历了从生产采集、消费、人工ADB、kTrace、AppiumMonkey、Perfetto、Instruments到FastBot的发展历程。早期工具如ADB、kTrace等操作复杂,数据展现不直观,而现代工具如Instruments、Perfetto则更易用,但仍存在使用门槛和数据处理限制。理想的线下工具应具备低使用门槛、直接定位原因、图形化数据展现、简单易读、减少使用限制和详细数据等特性。
性能归因的降本增效
性能归因通过自动化测试、人工测试和Fastbot清洗聚类等方式,有效解决了70+疑难问题中的25+内存卡顿、电量等问题。具体应用包括:
- 卡顿问题:通过火焰图和线程甘特图定位卡顿发生位置,分析线程快照、线程状态和CPU使用率等辅助信息,找出慢函数(如sqlite3_step耗时4.43s)、锁等待(Blocked 8.792ms)和资源抢占(软中断、高优先级线程)等原因。
- 内存问题:通过引用树和聚类分析,定位内存消耗位置(如Bitmap图片还原),并通过对比某一场景内存变化,找出内存激增原因。
- 功耗问题:通过系统维度统计电量消耗,结合多指标归因能力,精准测量功耗并定位到代码层面。
原理分析
性能归因工具的原理包括火焰图、线程快照、符号化、Hook(JVMTI)、插桩(systrace)、采样(profiloktrace)和ktrace等技术。ktrace是内核跟踪工具,用于记录系统调用、文件系统操作、信号处理和I/O等操作。Fastbot通过USBMuxd和Lockdownd等机制,解析ktrace数据,结合CPU、GPU、网络和电池等指标,实现性能数据采集和分析。
总结回顾
线下工具的发展目标是让工具更简单,降低归因门槛。对比Instruments和Perfetto,Fastbot等现代工具在易用性和数据完整性上更具优势。通过卡顿分析、内存分析、功耗分析和数据生产(Fastbot)等方法,性能归因工具能有效提升问题解决效率,降低开发成本。