《3-支付宝端体验度量及诊断-蚂蚁集团-邹明岩(禹晨).pdf》由会员分享,可在线阅读,更多相关《3-支付宝端体验度量及诊断-蚂蚁集团-邹明岩(禹晨).pdf(26页珍藏版)》请在三个皮匠报告上搜索。
1、付宝客户端体验度量与诊断邹明岩付宝端体验治理背景业务战略线下付占提/年活跃度逐年提户总量提核场景冷启动扫码启动、付款码启动渲染、登、唤端险舆情增发展受阻户流失户体验场景体感耗时控件响应时间降低提升付宝端体验治挑战度量精度不优化成果难保持问题复杂难定位撑多场景优化1234度量数据波动每个版本集成300+版本迭代快半动效率低平均问题定位效率低2-3天具段单具法并发撑付宝端冷启动场景及阶段拆分冷启动场景切分成2个阶段和若个阶段pre_launchtime_startup主线程LauncherApplication.InitattachBaseContext帧onCreate创建线程志模块闪退监控模块
2、dexaop模块dexpatch模块hookdvm预加载开关服务预加载线保镖预加载V读取元信息初始化代App初始化代理A初始化代理资源初始化B列表加载框架类加载器LA创建LAA预加载创建B类加载资源预加载LAA初始化读取描述件预加载服务基础服务初始化B元信息LAA初始化完成LAA加载V预加载展示欢迎路由逻辑初始化TAB四刚九宫格腰封贴图初始化城市组件阶段付宝端体验性能数据采集Unziped Patch apkUnziped Alipay apkAndroidManifestAndroidManifestassetslibassetslibclass.dex class2.dex class3.
3、dex classx.dexclass.dexres/yw_1222.jpgDexaop.cfg-Hook函数数据存储模块HookApplication命周期代理HookApp初始化数据采集模块Spider SDKDexAOP注册Hook函数阶段耗时数据阶段时间戳扩展数据数据存储sdcard性能诊断数据Patch APKresources.arsc合并Manifest合并so合并DexDex AOP待测包重打包Application替换成HookApplicationDexAOP.cfg重新签名代理资源合并采集数据不影响正式包付宝端体验度量精度提升场景A场景A设备组场景B场景B设备组设备分组独
4、降温设备设备稳定供电数据采集效率贴图样本数据处理环境预处理温控机房条件预处理提升度量精度200ms-10ms或CPU锁频业级智能hub100-30123研发平台构建平台APM平台真机调度系统真机设备组触发打包安装包、提交、集成信息、时间等触发测试任务查询设备状态运测试任务测试数据数据上报开发者集成申请版本性能数据集成CI付宝端体验度量CI程能2号3号审批通过基于当前基线构建安装包集成包1号开发者发布经理集成申请集成包基线时间线主集成基线预集成包时间线每次集成,基于主集成基线构建安装包保证每次集成都是基于上次集成基线递增每次构建完成回调性能平台问题定位式及阶段成果阶段技术成果11-2天定位问题集
5、成 15min2度量精度波动200ms10ms3单设备多品牌/OS 6.0-1042全职投0参与阶段问题1.部分性能问题,阶段对看不出问题3.性能问题排查困难,平均1-2天,难的3天以上2.主线程读开关,3毫秒性能影响,盒法发现度量精度不优化成果难保持问题复杂难定位撑多场景优化1234度量数据波动每个版本集成300+版本迭代快半动效率低平均问题定位效率低2-3天具段单具法并发撑付宝端体验治挑战常AOP具标和代理函数配置重打包把标函数实现,重定向到代理函数函数执在代理函数中实现HookDexAOP.cfg切函数代理函数实现数据存储模块初始化数据采集模块Spider初始化DexAOP初始化注册Ho
6、ok函数阶段耗时数据阶段时间戳扩展数据数据存储sdcard性能诊断模块主线程线程开关配置动态bundleServiceIOHook RunnableHook RunnableHook ConfigServiceHook BundleClassLoaderHook CreateExternalServiceHook read/write/close/openDexAOP.cfg合并Manifest合并soApplication-HookApplication合并DexDexAOP对象实例切法体切Patch APK性能诊断包名称/值名称/堆栈耗时/顺序主线程IO名称/耗时/数量名称/耗时/CPU耗
7、时/数量性能诊断数据付宝端体性能验诊断能建设切问题源于代码变更问题Branch:MasterCommitId:123Branch:DevMergeABCDMergeMergeMerge&申请集成CommitId:456只能看D提交的代码变更git-flow!策略已进集成的Commit未提交集成的Commit上次集成当前集成每次集成申请列表代码变更详情函数级代码变更诊断构想ClassA public void methodA()/do something public void methodB()/do something ClassA public void methodA()/do some
8、thing/do more public void methodB()/do something/do more public void methodC()/do something 假设:A类法methodA、C会在冷启动场景执基线版本A类性能变慢版本A类1.耗时增加的变更函数2.场景多跑的变更函数代码变更函数较标:代码变更函数级诊断diff付宝端体性能代码变更诊断diff变更函数基线本版本问题版本Bundle/类Bundle(GroupId&ArtifactId)类信息(包名+类名)法信息(包名+类名+法名+参数和返回值类型)性能度量性能诊断伙伴代码diff系统ossAPM性能平台存储Ad
9、d/Changed/RemoveAndroid APK 构建流程Java ComplierJava InterfacesSource codeR.Java.Class.DexApkbuilderJarsignerZipalign.APKSigined and Aligned.apkGradle构建流程DexAOPTransform +ASM付宝端体性能代码变更诊断程ClassReaderJava ComplierSourceCodeapkbuilder.apk.class Files.dex FilesJarsignerSigned.apkzipalign类访问接法进法退出ClassWrite
10、rPerfTrace gradle plugin伙伴构建系统ASMTransformATransformB定义TransformTransformClassesWithDex注册插件代码变更配置采集模块依赖注册Tranform法进回调法退出回调法信息线程信息数据dump数据清除版本A基线版本B基线插装构建变更代码信息TransformClassAdviceMethodAdapter打包构建流程针对变更bundle4对变更类的法进插装字节码过滤付宝端体性能代码变更诊断Gradle API TranformClassJarResourceTranformATranformBTranformCTra
11、nformN定义Transform系统TransformTranformClassesWithDexClass转换成Dex的TransformInitializationConfigurationExecutionHookHookHookGradle PluginGradle构建命周期Before project evaluation After project evaluation gradle.beforeProject project-gradle.afterProject project-project.beforeProject project-project.afterProjec
12、t project-gradle.taskGraph.graphPopulated-付宝端体性能代码变更诊断根录:build.gradleapply plugin:com.alipay.android.trace-plugin项录:build.gradledependenciesclasspath:com.alipay.perftrace:perftrace-gradle-plugin:1.2.3trace enable=truebaseMethodMapFile=$project.buildDir/output/methodmaptargetListFIle=$project.buildDi
13、r/targetlist/targetMethodList.txt/编译依赖/插件依赖/插件配置Bundle插件配置SpiderMTraceTagpublic static void i(String name)public static void o(String name)数据存储数据dump/记录法名称、线程名称、时间戳/法执开始和结束回调静态法插件Extension配置project.afterEvaluate注册定义TransformMappingReaderMappingProcessor混淆的类混淆的类混淆的类混淆的类混淆的类混淆的法混淆的类混淆的法MappingCollecto
14、r接收上个transform inputdirectoryInputsjarInputs遍历apply法transform法遍历Spider依赖traceConfig注册时机数据收集注册调时机标法列表directorOutsjarOutputs输出给下个transform outputASMASMASM是java字节码操作和分析框架TraceClassAdapterTraceMethodAdapterClassReaderClassReaderVisitMethodonMethodEnteronMethodExitClassWriter案例1、某个版本集成导致冷启动startup阶段变慢60m
15、s2、性能诊断报告3、代码变更诊断如何提前预判线上开关变更导致的性能劣化问题?Mock开关模块开关采集intent.getStringExtra(“key”)intent.getStringExtra(“value”)configService-writeConfigs()Hook ConfigService开关配置全量开关值PatchAPK开关变更诊断及预判上报APM开关变更诊断及预判度量精度不优化成果难保持问题复杂难定位撑多场景优化1234度量数据波动每个版本集成300+版本迭代快半动效率低平均问题定位效率低2-3天具段单具法并发撑付宝端体验治挑战Spider SDKSpider SDK1
16、.数据采集线上和线下实现分离,不影响线上3.具备场景还原能(利于排查问题)4.持线上2.具备阶段性能诊断能Spider APIOffLineResolverDefaultResolverSpiderResolverAPI层阶段打点接dump数据接线下实现层线下dump数据实现,存储到sdcard默认实现层线上dump数据是个空法,给线下实现记录阶段名称和时间戳实现阶段耗时计算逻辑接定义层Spider实现特点研发阶段发布阶段灰度阶段集成CI变更依赖分析代码diff系统构建系统代码扫描元信息灰度巡检发布监控达尔A/B灰度实验平台新增/暴增issue告警Issue 分配/群催办版本发布卡点群分流实验
17、案制定流量观测时间实验案执实时监控性能实时数据实验案决策场景设备分组设备组A动化驱动场景A脚本执数据处理温控机房伙伴平台真机平台客户端性能体验灰度、发布标准APM平台客户端场景度量Spider SDKNebulaPerf底层技术性能诊断线程功耗ANR流量开关AOPASM代理IOCI任务场景配置集成前场景配置场景例配置场景设备组配置数据处理配置CI任务调度任务触发任务状态管理设备组调度版本集成性能趋势单设备阶段对多设备阶段对代码变更诊断报告性能诊断报告数据计算/存储冷启动扫码渲染登唤端卡包AntMonitor监控/告警AntEye舆情平台Replays快排MobileHA异动感知微镜issue解析告警微镜平台版本维度性能全局看板付宝端性能体系化建设