字节跳动客户端性能优化最佳实践

如果无法正常显示,请先停止浏览器的去广告插件。
分享至:
1. 字节跳动客户端性能 优化最佳实践 Eric|字节跳动应用开发套件 MARS-APM 研发工程师 2021/11/20 1
2. 1.应用性能优化的方向 2.应用性能监控系统在字节的实践 3.接入应用性能监控全链路版 4. 未来规划 2 2
3. 3 应用性能优化的方向
4. 为什么要做性能优化 迭代、推广 4 4 闪退、卡顿 www.volcengine.com
5. 应用性能优化的方向 5 5 APM Crash ANR 支付错误 CPU 95% 稳定性 问题预防 性能 自定义监控 www.volcengine.com
6. 6 应用性能监控系统在字节的实践
7. 火山 APM 监控体系 —— 稳定性监控 CPU Exception 7 7 Disk IO Other Crash OOM Watchdog www.volcengine.com
8. 火山 APM 监控体系 —— 稳定性监控 8 8 Crash www.volcengine.com
9. 稳定性监控 ——Crash 9 9 NSSetUncaughtExceptionHandler() std::set_terminate() Last Exception Backtrace 软件异常 Unix Signal sigaction() 硬件异常 task_set_exception_ports() www.volcengine.com
10. Crash —— 异步调用栈 10 10 问题: 出错的堆栈是被异步执行的, 无法看到异步操作之前的堆 栈,仅靠此时的调用栈无法 排查问题 www.volcengine.com
11. Crash —— Zombie 11 11 问题: 线上野指针问题上报的 Mach 异常只有实例地址,没有其他有效信息,难以归因 目标: • 暴露更多野指针问题 • 捕获野指针访问前的实例类以及访问堆栈 • 避免对应用造成其他影响 www.volcengine.com
12. Crash —— 火山 Zombie dealloc deallocHandler Zombie Manager object 12 12 free object timeout memoryWarning new_message zombie_ Class report_exception www.volcengine.com
13. Crash —— Zombie 方案对比 13 Xcode Zombie 火山 Zombie 线上可用 只能线下调试 可以定位线上问题 问题覆盖度 线下测试覆盖面较小 线上暴露野指针问题,覆盖面广 内存问题 会造成内存泄漏 持有对象,并有释放策略,避免内存问题 野指针归因 可以确定 Zombie 对 可以捕获野指针的访问堆栈以及野指针原 象的类型 本对象的释放堆栈 13 www.volcengine.com
14. Crash —— CoreDump 14 14 发生 Mach 异常时,dump App 的运行状态:线程、寄存器、部分脏内存等 恢复崩溃现场 使用 LLDB 调试 查看堆栈、内存等 使用 CoreDump 分析,解决了某组件存在多年的崩溃问题 使单类型崩溃减少了 98% 全系 App 整体崩溃率下降 8% www.volcengine.com
15. 火山 APM 监控体系 —— 稳定性监控 15 15 Watchdog www.volcengine.com
16. 稳定性监控 —— Watchdog 16 16 传送门:字节跳动技术团队 —— 《iOS 稳定性问题治理:卡死崩溃监控原理及最佳实践》 www.volcengine.com
17. Watchdog —— 案例分析 17 17 www.volcengine.com
18. Watchdog —— 案例分析 18 18 www.volcengine.com
19. Watchdog —— 案例分析 19 19 App 卡死 8s 时的主线程调用栈 www.volcengine.com
20. Watchdog —— 案例分析 20 20 App 卡死 35s 时的主线程调用栈 www.volcengine.com
21. Watchdog —— 案例分析 21 21 App 卡死 36s、37s 时的主线程调用栈 www.volcengine.com
22. Watchdog —— 线上效果 22 22 3.5 3 2.5 现在 接入卡死监控 2 1.5 1 0.5 0 普通崩溃 卡死 www.volcengine.com
23. 火山 APM 监控体系 —— 稳定性监控 23 23 OOM www.volcengine.com
24. 稳定性监控 —— OOM 24 24 • App 更新了版本 • App 发生了崩溃 • 用户手动退出 • 操作系统更新了版本 • App 切换到后台之后进程终止 • 覆盖安装 • Watchdog 崩溃 • 后台启动 • XCTest/UITest 等自动化测试框架驱动 • 应用 exit 主动退出 www.volcengine.com
25. 稳定性监控 —— MemoryGraph 25 25 OOM 线上常见方案为记录内存分配的调用栈,这种方案的弊端 是运行时性能消耗过大 +16 CALayer MemoryGraph 采用内存快照技术,只在 问题发生时进行信息收集,对 99% 的线上 用户没有任何影响 Heap _layer UIView _viewDelegate MyViewController _myContext CGContext www.volcengine.com
26. 稳定性监控 —— OOM 方案对比 26 26 传统方案(抓栈) Xcode MemoryGraph 火山 MemoryGraph 内存引用信息 无 有 有 线上可用 是 否 是 性能损耗 性能损耗大 — 99% 用户无性能损耗 子节点信息 无 无 有,可以查看某个对象的所有子节点 路径标记 无 无 有,可以标记不同对象的共性 传送门:字节跳动技术团队 —— 《iOS性能优化实践:头条抖音如何实现OOM崩溃率下降50%+》 www.volcengine.com
27. 火山 MemoryGraph —— 案例分析 27 27 通用信息 类列表 对象列表 引用关系 www.volcengine.com
28. 火山 MemoryGraph —— 案例分析 28 28 VM: CG Raster Data : CoreGraphics 使用到的栅格数据,通常是图片,在重度 使用网络图片的 App 中,该类型 VM 通常是内存使用大头 www.volcengine.com
29. 火山 MemoryGraph —— 案例分析 29 29 www.volcengine.com
30. 火山 MemoryGraph —— 案例分析 30 30 www.volcengine.com
31. 火山 MemoryGraph —— 线上效果 接入后 OOM 崩溃率下降了 31 31 50%+ 三个月内 OOM 崩溃率下降了 80%+ www.volcengine.com
32. 火山 APM 监控体系 —— 稳定性监控 CPU Exception 32 32 Disk IO www.volcengine.com
33. 稳定性监控 —— MetricKit iOS 14+ 异常回调 数据上报 33 后台分析 33 数据展示 www.volcengine.com
34. 火山 APM 监控体系 —— 问题预防 before 34 34 闪退 Crash、ANR after 执行保护逻辑 上报异常问题 修复异常问题 www.volcengine.com
35. 问题预防 —— 崩溃防护 继续原始逻辑 调用易崩方法 35 35 继续原始逻辑 业务逻辑 防护逻辑 Hook 易崩方法 否 是 判断是否会崩溃 判断是否有 try catch 是 执行保护逻辑 上报问题堆栈 否 防护范围:Unrecognized selector、Container、Notification、 KVO、KVC、NSUserdefaults … www.volcengine.com
36. 问题预防 —— 卡死保护 36 36 主线程调用 继续原始逻辑 业务逻辑 防护逻辑 Hook 高危 API 否 异步执行 等待超时 是 返回默认值 上报问题堆栈 防护范围:UIPasteboard、UIApplication、YYCache、 NSUserdefaults、CoreLocation… www.volcengine.com
37. 问题预防 —— 线上收益 37 37 2020 年由于某外部 SDK 后台下发数据出错,引发很多使用方线 上出现大面积崩溃,影响用户众多,当时内部已经接入了崩溃防护, 兜住了 100w+ 量级的崩溃,免受于这场风波。 www.volcengine.com
38. 火山 APM 监控体系 38 稳定性监控 Crash、线上Zombie、CoreDump、 Watchdog、OOM、MetricKit 问题预防 崩溃防护、卡死保护 性能监控 启动分析、页面分析、CPU、电量、 磁盘、网络 自定义监控 自定义异常、事件埋点、自定义日志 38 火山 APM www.volcengine.com
39. 39 接入应用性能监控全链路版
40. 火山引擎应用开发套件 MARS,免费公测中 火山引擎应用开发套件 MARS,是由字节跳动技术经验的沉淀,经抖音、今日头条等多款 App 研发实践验证、诸多企业使 用的面向多端开发场景的应用研发工具,致力于通过先进的研发技术,帮助企业和用户降低研发成本、聚焦业务成功。 微信扫码关注公众号,点击底部菜单栏“MARS 产品”即可申 请免费试用,如有私部需求也可在公众号内随时与我们联系解决。 www.volcengine.com
41. 41 未来规划
42. 未来规划 42 42 内存问题 MemoryGraph 归因 性能问题归因 多平台联动 …… www.volcengine.com
43. 欢迎加入 4 3 43 扫码关注 “火山引擎开发者社区”公众号 www.volcengine.com
44. www.volcengine.com

Home - Wiki
Copyright © 2011-2024 iteam. Current version is 2.137.1. UTC+08:00, 2024-11-15 22:35
浙ICP备14020137号-1 $Map of visitor$