Instruments 是 Apple 提供的一个强大性能分析和调试工具,随 Xcode 一起提供,用于分析 iOS、macOS、watchOS 和 tvOS 应用的运行时行为。

可以用 Instruments 来找出:
1、性能瓶颈(卡顿、CPU 爆高)。
2、内存泄漏(Memory Leak)。
3、内存使用过大(Memory Usage)。
4、线程死锁、线程竞争。
5、UI 卡顿(帧率低)。
6、不必要的磁盘读写。
7、音频、网络延迟问题。
打开方式
有两种方式打开:
方式一:从Xcode启动
在 Xcode 菜单栏:
Product > Profile (快捷键 Cmd + I)
或菜单栏:
Xcode > Open Developer Tool > Instruments

方式二:单独启动
也可以在“聚焦”(快捷键Command + Space空格)上搜索 “Instruments” 启动它:
/Applications/Xcode.app/Contents/Applications/Instruments.app

Instruments 的核心构件:Template 模板

Instruments 提供很多预设的「分析模板」,每个模板分析不同维度。
基础与常用分析工具
1、Blank:空白模板,用于自定义组合多种工具,如 Time Profiler、Allocations 等,适合高级用户自定义分析流程。
2、Activity Monitor:类似 macOS 自带的活动监视器,查看 CPU、内存、磁盘、能耗、线程等使用状况。实时监控资源占用情况。
3、Allocations:跟踪对象的内存分配与释放,找出内存泄漏、过度分配或对象生命周期过长等问题。
4、App Launch:分析 应用从启动开始到可交互为止的全过程,调试应用启动时间过长的问题。
5、Leaks:检测内存泄漏。与 Allocations 搭配使用更有效。
性能分析工具
1、Time Profiler:采样调用栈,找出最耗时的函数。用于定位 CPU 性能瓶颈(最常用的性能分析工具之一)。
2、CPU Profiler:更底层的 CPU 分析工具,比 Time Profiler 粒度更细,支持多核心、缓存命中等。
3、CPU Counters:监控硬件性能计数器,比如缓存命中率、分支预测失败、指令数量等。需要支持的硬件。
4、System Trace:综合系统级分析,包括线程切换、I/O、CPU、内核事件,适合复杂系统瓶颈诊断。
5、Processor Trace:使用 Intel PT 技术进行低级别指令跟踪(较底层,适合内核开发或系统调优)。
图形与游戏相关
1、Metal System Trace:分析 Metal 图形指令执行、GPU 调度延迟、资源加载。用于调试 macOS / iOS 上的 Metal 应用性能问题。
2、SceneKit:用于分析 SceneKit 渲染性能,如场景图更新、渲染时间、动画卡顿等。
3、RealityKit Trace:分析使用 RealityKit 的 AR 应用,调试实体、锚点、物理系统和渲染效率。
4、Game Memory:针对游戏内存使用优化,包括纹理缓存、资源加载等。
5、Game Performance:全面分析游戏帧率、GPU、CPU 开销,识别卡顿、帧落问题。
6、Animation Hitches:查找动画过程中卡顿的原因,定位阻塞主线程或渲染 pipeline 的问题。
Swift / Concurrency 专用
1、SwiftUI:分析 SwiftUI 构建过程中的性能问题,比如过度渲染、状态更新等。适合调试 SwiftUI 界面更新卡顿问题。
2、Swift Concurrency:追踪 async/await 任务、任务调度、并发执行,识别 Swift Concurrency 造成的问题(如任务未结束、调度瓶颈等)。
系统交互与资源分析
1、Network:分析网络请求、响应时间、带宽使用,查看哪些请求造成了卡顿或延迟。
2、File Activity:跟踪文件系统的读写操作,识别 I/O 瓶颈或频繁磁盘访问问题。
3、Data Persistence:专注 Core Data、SQLite、NSFileManager、NSUserDefaults 等数据持久化操作的性能。
音频与机器学习
1、Audio System Trace:分析音频播放系统,如音频中断、播放延迟、缓冲区状态,适用于音频 App 或游戏。
2、Core ML:分析使用 Core ML 模型推理时的加载、执行效率和资源占用情况。
特殊调试与日志工具
1、Zombies:检测已释放对象被访问(“野指针”访问),主要用于检测 EXC_BAD_ACCESS 崩溃。
2、Logging:实时查看 OSLog、os_signpost、print() 等输出日志。与代码中插桩配合使用效果最佳。
使用教程
在Xcode中打开项目,选择要分析的Scheme(macOS应用)。

使用快捷键:⌘ + I(Command + I),弹出Instruments 应用,这里选择“SwiftUI”分析模板。

双击“SwiftUI”分析模版,进入Instruments界面。

在Instruments界面,点击左上角的Record按钮,开始录制。

Instruments会自动打开App,在App中执行需要调试的操作(如点按钮跑循环),执行完毕后,回到 Instruments,再次点击左上角的Stop停止录制按钮。
这时,可以在Instruments界面查看:
1、哪些函数最耗时。
2、哪些系统 API 被频繁调用。
3、函数调用路径(调用栈)。
4、UI 更新或后台逻辑是否占用主线程。
如果看到主线程有大量 CPU 使用,说明有优化空间。

添加多个Instrument工具
Instruments 启动时只能选择一个模板,但每个模板本质上就是一组预配置的 instrument 工具(仪器)的组合。可以在录制过程中手动添加其他工具,如 “Allocations” 或 “Leaks”。
1、启动 Instruments 并选择任意一个模板(比如选择了 “Time Profiler”)。
2、在打开的 Instruments 窗口中,点击左上角的 ”+” 按钮(Add Instrument):

3、在弹出的列表中,可以选择任意 instrument 工具(如 Leaks、CPU Counters、File Activity 等),并将其添加到当前分析中。
4、所有添加的工具都会并行采集数据,可以在每个工具的面板中单独查看结果。
推荐配合使用场景
1、App 启动优化:App Launch + Time Profiler;
2、UI 卡顿排查(SwiftUI):SwiftUI + Time Profiler;
3、多线程问题(async/await):Swift Concurrency + System Trace;
4、内存泄漏排查:Allocations + Leaks + Zombies;
5、网络慢排查:Network + System Trace;
6、游戏性能问题:Game Performance + Metal System Trace;
7、文件写入卡顿:File Activity + Data Persistence。
总结
通过Instruments可以实现检测泄漏对象、SwiftUI性能等功能,根据需求选择Instruments对应的分析模版。
在Instruments界面中,可以通过左上角的按钮栏,实现运行、停止、快照等控制分析。
中间时间轴,随时间变化用于显示分析数据。
在时间轴左侧选择分析的对象类型,底部显示对象列表,双击对象列表的数据可以显示详细信息。

相关文章
Profiling apps using Instruments:https://developer.apple.com/tutorials/instruments