Instruments 是 Xcode 的性能分析工具套件,包含多个专门的分析工具:
内存相关工具
- Leaks:检测内存泄漏,找出未被释放的对象
- Allocations:跟踪内存分配,监控堆内存使用情况
- VM Tracker:监控虚拟内存使用
- Zombies:检测已释放对象的访问(野指针问题)
性能分析工具
- Time Profiler:CPU 性能分析,找出耗时的代码路径
- Core Animation:分析 UI 渲染性能和动画性能
- GPU:分析 GPU 使用情况和图形性能
- Metal System Trace:Metal 图形 API 性能分析
网络和 I/O 工具
- Network:监控网络请求和数据传输
- File Activity:监控文件系统操作
- Disk Writes:跟踪磁盘写入操作
系统资源工具
- Activity Monitor:系统整体资源使用情况
- Energy Log:电量消耗分析
- Thermal State:设备温度状态监控
专门调试工具
- Main Thread Checker:检测主线程违规操作
- Thread Sanitizer:检测多线程竞争条件
- Address Sanitizer:检测内存访问错误
- Undefined Behavior Sanitizer:检测未定义行为
UI 和用户体验
- Animation Hitches:检测动画卡顿
- SwiftUI:SwiftUI 性能分析
- Accessibility Inspector:无障碍功能检查
使用建议
内存问题调试流程:
- 先用 Memory Graph Debugger 快速查看当前内存状态
- 再用 Instruments 的 Leaks 进行深入的内存泄漏检测
- 使用 Allocations 跟踪内存分配模式
性能优化流程:
- Time Profiler 找出 CPU 热点
- Core Animation 优化 UI 性能
- Network 优化网络请求
Memory Graph Debugger 更适合快速诊断当前内存状态,而 Instruments 更适合长时间监控和深入分析性能问题。
Memory Graph Debugger 位置
Memory Graph Debugger 不在 Instruments 里面,它是 Xcode 的内置调试工具。
如何访问 Memory Graph Debugger:
- 在 Xcode 中运行你的应用
- 在调试工具栏中点击内存图标(Debug Memory Graph 按钮)
- 或者通过菜单:Debug → View Memory → View Memory Graph Hierarchy
- 快捷键:⌘⇧M
当你点击后,Xcode 会暂停应用并显示当前的内存图,内存调试器(Memory Graph Debugger)截图。
Xcode 内存调试器(Memory Graph Debugger)截图,显示了 iOS 应用运行时的内存使用情况。界面的各个部分:
界面结构分析
顶部区域 - All Heap & Anonymous VM
- 蓝色条形图:表示整个应用的内存使用情况的可视化展示
- 这个条形图显示了堆内存和匿名虚拟内存的总体分布
左侧面板 - VM Tracker
显示了三个关键的内存指标:
- Dirty Size(脏页大小) :已被修改的内存页面大小
- Swapped Size(交换大小) :被交换到磁盘的内存大小
- Resident Size(驻留大小) :当前实际占用的物理内存大小
下方主要区域 - Generations(代际视图)
这是内存快照的核心部分,显示了不同时间点的内存状态:
Generation A & B
- 这些是不同时间点拍摄的内存快照
- Timestamp:快照拍摄的时间戳
- Growth:内存增长量(Generation B 相比 A 增长了多少)
- # Persistent:持久化对象的数量
关键数据解读
- Generation A: 88.17 MiB,227,857 个持久对象
- Generation B: 94.12 MiB,9,703 个持久对象
- VM: IOSurface: 35.58 MiB,3 个对象
- < non-object > : 34.75 MiB,7,015 个对象(红框标注的重点区域)
详细内存地址列表
底部显示了具体的内存地址和对应的内存使用量:
- 每行显示一个内存地址(如 0x100760000)
- 对应的内存大小(如 2.53 MiB)
- 时间戳信息
如何使用这个工具
内存泄漏检测
- 在不同时间点拍摄多个快照
- 对比 Growth 列,查看内存是否持续增长
- 关注 Persistent 对象数量的变化
性能优化
- 查看大内存占用者:关注 Growth 列中数值较大的项目
- 分析对象类型:点击具体项目可以查看是什么类型的对象在占用内存
- 追踪内存分配:通过时间戳可以了解内存分配的时间线
重点关注区域
图中红框标注的 "< non-object >" 区域特别值得关注:
- 占用了 34.75 MiB 内存
- 包含 7,015 个非对象项目
- 这通常表示 C/C++ 分配的内存或者图像数据等
实际应用建议
- 定期拍摄快照:在应用的关键操作前后拍摄快照进行对比
- 关注异常增长:如果某个 Generation 的 Growth 异常大,需要深入分析
- 检查循环引用:持续增长的对象数量可能表示存在内存泄漏
- 优化大对象:重点优化占用内存较大的对象类型
这个工具是 iOS 开发中非常重要的内存调试工具,可以帮助开发者及时发现和解决内存相关的问题。