《2-抖音iOS客户端性能防劣化实践-抖音集团-陈驿波.pdf》由会员分享,可在线阅读,更多相关《2-抖音iOS客户端性能防劣化实践-抖音集团-陈驿波.pdf(41页珍藏版)》请在三个皮匠报告上搜索。
1、抖音iOS客户端性能防劣化实践十余年iOS一线研发与技术管理经验分享人:陈驿波在头部视频应用和互联网金融科技行业参与和主导多个千万级别大型应用技术基建和团队管理工作。目前主要负责抖音iOS客户端工具链建设、性能防劣化与诊断调优体系建设目录性能防劣化背景版本间防劣化MR防劣化总结和规划0102030401 性能防劣化背景设备碎片化测试效率低下无法”防”住劣化覆盖的设备型号和系统多样化:机型=iPhone 6系统=iOS 11.0功能测试消耗大量人力性能测试覆盖度不够缺乏有效手段和工具问题难以归因治理难度大传统的劣化后再治理的方式需要花费大量的时间和精力随着业务的快速迭代,之前的优化成果可能会很快
2、再次劣化版本间防劣化指标防劣化建设Trace分析防劣化建设02指标防劣化-接入流程初筛和问题消费指标的作用l 关联埋点,获取场景耗时l 根据指标波动判断是否劣化,实现平台劣化报警l 匹配函数堆栈,实现trace截取与分析思考:指标防劣化存在的问题?存在的问题指标的统计口径不一致,不同的系统可能存在差异随着业务的迭代或者架构的调整,会出现埋点对不齐或者失效的情况,维护成本大易受环境干扰,数据波动大,劣化报警和归因准确率低,需要投入大量人力初筛无法拦截子阶段劣化问题,容易出现劣化问题逃逸。Trace分析防劣化建设动态插桩动态插桩无需维护指标和埋点,对业务无侵入,接入成本更低支持子阶段防劣化支持子阶
3、段防劣化基于Trace diff分析,只要子阶段出现劣化,一样可以归因发现归因更准确归因更准确通过分析逻辑变更来判断是否劣化,而非耗时的数值变化,归因准确率得到明显提升多维置信度计算多维置信度计算除了基于统计学算法的异常数据剔除,同时增加了堆栈相似度变更、静态代码变更分析等多维置信度计算客户端防劣化工具链建设 采集工具介绍:工具的选型、常用命令、iOS Trace介绍 Trace标准化:背景、Trace对比、函数调用关系链和计算函数耗时 符号化:dSYM和Load Address 常见问题与解决思路工具建设-采集工具选型工具工具优点优点缺点缺点Instruments苹果官方提供,稳定性好,功能
4、强大提供可视化界面对App性能有一定影响不支持命令行采集xctrace 苹果官方提供,稳定性好,功能强大 支持命令行集成 无侵入,对App性能影响小基于采样,部分耗时较短的函数可能采集不到基于协议逆向的工具 基于通信协议逆向,对App性能影响小 提供可视化界面 支持常见指标的采集和诊断能力不具备通用的Trace采集能力不支持自定义需求第三方插件 可以根据需求支持各种自定义能力侵入式接入成本高对App性能有较大影响xctrace的特点:稳定性高、无侵入、低损耗、支持命令行集成xctrace常用命令xctrace record-output aweme.trace-template Time Pr
5、ofiler-device 00A1401E-launch-com.ss.iphone.ugc.Awemexctrace record-output aweme.trace-template Time Profiler-device 00A1401E-all-processes-time-limit 10sxctrace export-input aweme.trace-xpath/trace-toc/runnumber=1/data/tableschema=time-profile-output aweme.xml 开始采集
6、 停止采集 导出采样数据文件结构预览xctrace export-input aweme.trace-toc/trace/trace-toc/runnumber=1/data/tableschema=timetoc/runnumber=1/data/tableschema=time-profileprofile采样文件初识l 基于采样,采样频率是1ms1msl 格式固定,可以通过脚本和自动化工具进行分析和处理l 每行采样数据包含 采样时间、进程、线程、堆栈地址列表 等数据Trace标准化Trace标准化的目的:复用更成熟的分析服务,解决指标防劣化存在的问题,避免重复建设Trace对比标准化前标
7、准化后如何标准化-函数调用关系链|E|pid|method 1|B|pid|method 1|B|pid|method 3|B|pid|method 5|E|pid|method 5|B|pid|method 6|E|pid|method 6|E|pid|method 3|B|pid|method 2|E|pid|method 2|B|pid|method 4|E|pid|method 4采样数据计算函数耗时三点原则:子方法的开始时间一定=父方法的开始时间 子方法的结束时间一定=父方法的结束时间 同一层级的,函数靠前的结束时间一定 +DYPlaceholderDYPlaceholder exe
8、cuteexecute(in(in TestDemoTestDemo)(DYPlaceHolder.m:66)(DYPlaceHolder.m:66)地址符号化依赖dSYM文件和Load AddressdSYMdSYM 的全称是 Debug Symbols,即调试符号,一般称为符号文件可以修改 Xcode 编译配置在安装包构建的时候和 App 一并生成,具体操作路径为:Target-Build Settings-Debug Information Format修改配置为 DWARF with dSYM File,如下图:Load AddressLoad Address即可执行文件和依赖的动态库
9、镜像(image)的加载地址和Load Address关联的一个概念是ASLR,ASLR全称是Address Space Layout Randomization,即地址空间布局随机化,是一种用于增强操作系统安全性的技术。在iOS中,ASLR是指将应用程序的内存地址随机化,使攻击者难以预测并利用可能存在的漏洞。如何获取Load Address?公式:Load Address=text_segment-vmaddr+slide 获取VM Address:获取slide:1.为 image load 注册回调函数:2.判断Mach-O文件类型,获取slide:常见问题与解决思路l 如何解决段迁移技
10、术的后遗症问题?l 如何解决符号化效率问题?l 如何解决火焰图错乱的问题?l 如何解决开始和结束方法概率性采集不到的问题?如何解决段迁移技术的后遗症问题?iOS 段迁移技术是指将一个应用程序的可执行文件中的某些段(例如代码段、数据段等)从一个位置移动到另一个位置,从而提升应用程序的性能。符号化效率问题 传统方案 symbolicatecrash atos用法:symbolicatecrash log.crash-d xxx.app.dSYM缺点:1、耗时长;2、粒度粗,无法针对单个地址符号化用法:atos o path_to_dwarf_file l load_address stack_ad
11、dress缺点:适合少量地址的符号化,针对大量地址的符号化非常耗时符号化效率问题 优化方案认识DWARF:DWARF是一种调试信息格式,它也是一种文件类型为MH_DSYM的Mach-O文件符号化相关的Segment和Section:_DWARF,_debug_info,_debug_line,_debug_aranges等符号化效率问题 dwarfdump可以使用 dwarfdump lookup 指令查找地址对应的符号信息:dwarfdump-lookup file_address-arch arm64 path_to_dwarf结果和使用atos完全一致符号化效率问题 符号解析原理瓶颈:根
12、据地址查找符号的过程耗时过长,每个地址符号化都需要经历这个过程解决方案:预解析所有地址与符号的映射关系,并通过数据库存储,需要符号化时直接查找如何解决火焰图错乱的问题?可能的原因有两个:1.函数耗时计算错误,导致火焰图层级错乱2.时间排序问题,线程数据汇总排序开始和结束方法概率性采集不到耗时较短的方法概率性采集不到劣化分析失败1.动态hook2.根据时间截取trace3.全量diff问题原因影响解决方案基于采样,采样频率是1ms,但不严格保证Benchmark1.埋点耗时与函数耗时对比2.转换前后火焰图对比3.历史有效劣化验证4.新的劣化问题发现拦截新的劣化1313个,拦截劣化耗时785785
13、ms小结l 通过benchmark验证了整个方案的有效证l 完成了指标防劣化到Trace分析防劣化的建设l 实现双端分析服务和消费流程统一MR防劣化MR防劣化的目标:让劣化拦截更加的前置MR防劣化流程图:03场景圈定 代码改动分析服务 指标路径分析服务对代码进行差异分析,获取改动内容预先通过自动化测试收集目标场景的方法集合,并通过改动内容来匹配出待测试的场景目的:通过场景圈定,可以筛选出待测试的场景,对MRMR进行精准测试,高效利用设备资源静态分析 CallGraph构建 耗时函数检测利用改动方法构建出调用关系,并沿着调用链逐级分析耗时函数建立耗时方法检测规则库,命中即可判定为耗时函数,如锁、循环、IO、渲染相关的操作静态分析是对MRMR进行一次初判和过滤,防止系统资源浪费动态分析动态分析是对静态分析的补充和验证,结合埋点、TraceTrace和诊断三个维度的分析最终定位劣化问题小结 MR防劣化可以更加前置的拦截劣化问题 通过动静结合的方式节省系统资源,提升劣化拦截准确率未来规划l 建设全链路性能防劣化平台和服务l 更多维度性能数据采集和分析归因能力l 小程序跨端性能防劣化建设