Apple性能分析和调试工具Instruments
Apple性能分析和调试工具Instruments

Apple性能分析和调试工具Instruments

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

   

如果您认为这篇文章给您带来了帮助,您可以在此通过支付宝或者微信打赏网站开发者。

欢迎加入我们的 微信交流群QQ交流群,交流更多精彩内容!
微信交流群二维码 QQ交流群二维码

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注