APMPlus中 MemoryGraph技术能力分享

如果无法正常显示,请先停止浏览器的去广告插件。
分享至:
1. APMPlus中MemoryGraph技术能力分享 分享嘉宾:党鹏⻜
2. 01 02 03 APMPlus介绍 OOM剖析 MemoryGraph原理和 使用
3. 01 APMPlus介绍
4. iOS开发的前世今生 iPhone OS 1 第一个本地化iPhone 应用程序开发包 变更为iOS OS iOS 4 - 6 今日头条 iOS 7 - 11 抖音 iOS 11以后 ⻜书 2007年1月9日 2007年10月17日 2010年 - 2013年 2012年3月 2013年-2017年 2016年9月 2017年 - 至今 2019年9月 至今
5. 应用性能管理方法论 开发环境 生产环境
6. 应用性能监控全链路版(APMPlus) • 业务全链路 • 功能全链路 • 平台全链路
7. 业务全链路
8. 功能全链路
9. 平台全链路 • iOS • Android • Flutter • Hybrid • Web • 服务端 • 小程序 • PC(即将上线)
10. APMPlus有什么优势? • 全链路的APM • 更稳定的APM • 更低的接入成本:非侵入式SDK • 更丰富的异常现场还原能力 • 更灵活的管理方式,以节省开支 • …
11. 02 OOM剖析
12. OOM是什么? OOM(Out Of Memory)指的是应用因系统内存占用过高而被操作系统强制终止的崩溃 前台应用 前台应用 前台应用 后台应用B 后台应用B 后台应用A 后台应用A 后台应用A 系统占用 系统占用 系统占用 BOOM崩溃 前台应用 阈值 系统占用 BOOM崩溃 系统占用 FOOM崩溃
13. OOM的危害? • 对重度用户更易产生影响 • 随着业务的迭代,OOM的量不容小觑 • 一些其它的副作用
14. OOM的解决方案? • Xcode提供的Memory Graph功能 • Instruments相关的工具集 • Jetsam • 一些开源库
15. OOM的特点 • 难调试 • 难复现
16. 03 MemoryGrap 原理和使用
17. iOS的内存模型 High High VM Region 内存块1 内存块2 内存块3 MMU VM Region CPU 内存块4 VM Region Low 物理内存 struct vm_region_submap_info_64 { … unsigned int user_tag; … }; 判定user_tag 完整定义:vm_statistics.h文件 VM Region Low vm_region_recurse vm_region_recurse64 虚拟内存 VM_MEMORY_STACK 栈空间 VM_MEMORY_MALLOC_xxx 由libmalloc声明的VM Region 其它类型 不做特殊处理
18. iOS的内存模型 - 栈空间 High • 栈空间从高地址向低地址使用 • 通过SP来标记栈空间的使用情况 SP task_threads thread_get_state Low 栈
19. iOS的内存模型 - 堆空间 High VM Region malloc_get_all_zones VM Region VM Region VM Region Low 虚拟内存 typedef struct _malloc_zone_t { … struct malloc_introspection_t *(introspect); … } malloc_zone_t;
20. MemoryGraph如何运行的? • 挂起所有非采集线程 • 获取所有的内存节点 • 建立内存对象引用关系以及相应的辅 助信息 • 写入文件 • 恢复线程状态
21. MemoryGraph对象如何符号化 Object Pointer object_getClass Class objc_copyClassList __NSCFType object_getClassName CFGetTypeID CFTypeID CFCopyTypeIDDescription ClassName ClassName
22. MemoryGraph的引用树和支配树 User Space User Space 1 Abandoned 1 Abandoned 2 2 3 3 4 5 4 6 5 6 7 引用树 7 支配树
23. MemoryGraph如何使用?
24. 我们来实操一下吧 Demo
25. MemoryGraph的效果怎么样? • 头条、⻜书、抖音等OOM率都下降50%+ • 单次采集成功率可以达到99.5% • 能够完整还原用户当时的内存状态 • 通过分析线上内存状态,量化大内存占用和内存泄露 • 通过节点符号和引用关系回答内存节点为什么存活这个问题 • 支持主要的编程语言,包括OC,C/C++,Swift等
26. MemoryGraph的性能和系统损耗怎么样?
27. 我们为MemoryGraph的性能,还做了哪些工作? mmap 死锁检测 内存排序、二分查找 非法内存访问 非法内存过滤 性能方面 稳定性方面
28. 其它问题?
29. 感谢观看

首页 - Wiki
Copyright © 2011-2024 iteam. Current version is 2.137.1. UTC+08:00, 2024-11-24 19:05
浙ICP备14020137号-1 $访客地图$