点评App启动优化
如果无法正常显示,请先停止浏览器的去广告插件。
1. 点评App启动优化
分享
:永鹤
美团点评事业部
2. 项
。
3. 治理流程
4. 01
防劣化
5. 线下分析能
Systrace
01
分析系统内核层
Trace
带
具,直观分析 CPU
Btrace
2.0:插桩,可在线上或线下对特定 法进
3.0:虚拟机堆栈回溯,动态抓取堆栈。
焰图、内存分配,适合快速定位耗时函数。
动态追踪,实现
侵
的性能监控。
链路,卡顿函数堆栈上报。
动化核
插桩,
Pro ler
Android Studio
02
03
慢函数
的活动,如 CPU 调度、I/O 操作、锁等待,是定位主线程阻塞的利器。
6. 线下能
的不
3 线下很难覆盖线上的所有case。
慢函数插桩:可以作为线上策略,但是有10%的包体积增量。
2 Trace数据详细,但是采集时 时机受限,
1
法作为线上策略。
7. 动化&线上监控
8. 01
防劣化
9. 优化的六字箴
懒加载:
代码,裁剪功能路径。最优
延迟加载:
次使
再初始化
要任务有计划后推
:删除
不执
异步:主线程减负,io、反序列化等扔到
预加载:空间换时间
减负:代码优化,降低
身耗时
线程
10. 01
防劣化
11. 系统&IO
Provider attach&onCreate进 懒加载
系统特性优化
IPC增加缓存策略,避免启动阶段频繁ipc耗时
利
Baseline Pro le实现AOT编译加速
GC抑制,class预热,
件,避免
件耗时
产Gson 法字段,减少反射耗时
系统消息优先级(同步屏障)
件名存储
个key,打开
空间换时间ASM
到
监控
式mmkv,File
效的缓存
使
志,提
IO优化
12. 启动项&资源&调度
启动项
资源
调度
1 严格按需初始化,不能夹带私货 1 xml预热,避免锁,注意停 1 全局线程池统
2 使 2 io预热 2 优先级&业务负载
3 线程提前预热 3 监控任务的合理性(等待、执
启动会框进
sdk初始化
3 管控第三
拓扑加载
)
13. 负载挑战
负载打满:以往经验来看,启动前 5 秒,CPU 负载
乎 100% 被打满,此时添加任何任务都需要 常谨慎。
1 监控线上的负载能
监控
2 监控线上任务的执
情况,耗时,成功率等
3 任务的依赖关系以及优先级
14. 负载监控
如图是假设8核机器上启动阶段有30个任务的示意
图,监控负载前需要将负载任务进 可视化,原 监
控就是启动阶段所有任务的耗时(cpu wall)。
总负载:所有完成(使 前加载成功记为完成)task的
和可以作为总负载的 个监控,先别计较是否必须在
启动阶段加载,先统计出来 个总负载的耗时,如果
是30个任务完成,加和为2650ms,总负载就是
2650ms。
原 监控:每个任务的耗时,cpu time和wall
time,可以直观的得出某个任务的所占总负载的
耗时情况,之后按照必要性进 赛 治理。
个
15. 负载优化
1 对所有资源预热成功率进 监控。
2 按为每个任务设置可停 的标志位,在特定场景
(如 户已离开
)及时中断,避免资源浪费。
16. 智能加载-落地
Push or scheme唤起
典型案例:通过推送(Push)打开特定
。由于 户意图明确, 需加载完整
的
,因此资源预热应跳过 必要内容,优先加载落地 所需资源。
17. 户习惯
户优先预热相关资源,以便他们在进
搜索功能的
频使
根据 户习惯智能预热组件与资源。例如,为
能迅速发起搜索。
智能预测-
后
18. 智能策略-设备差异
19. 01
防劣化
20. 防劣化-线下
编码期
涉及到启动相关的改动进
必要
员CR
回归测试
回归阶段全量慢函数监控上报
集成
集成 动触发启动
超过阈值进
发布前
动化测试
确认,
发布前
trace分析是否新增卡点
21. 防劣化-线上
线上巡检
实验平台定期对线上所有的实验的所有实验组对照
组进 核 指标对 ,超过阈值进 报警。
线上监控
1 名单插桩:针对线下卡顿堆栈 名单插桩做线上监控。
2 watchdog+虚拟机堆栈回溯动态获取卡顿。
3 全量慢函数监控针对哨兵版本发布(每个季度发 次,或者针对渠道灰度)。
22. 成果
23. 化建设:做好科普,
的优化理念
1 向产品和业务 “布道”,让他们理解性能与
业务增 的正相关性。
2 在需求评审阶段就介 ,评估性能 险,在
劣化形成前就消灭掉。
24. 期规划:打造轻量级、
25. Q&A
26. 招聘:移动端 级开发 程师(性能优化)
移动端 级开发 程师(App基建)
鸿蒙开发 程师
邮箱:shenyonghe@meituan.com
更多技术 货
欢迎关注“美团技术团队”