iOS 性能工具
目录
- iOS 性能工具
- 目录
- 概览
- 一、官方工具
- 二、第三方工具
- 2.1 设备管理工具
- 2.1.1 基本原理
- 2.1.2 工具介绍
- 2.2 线上监控工具(APM)
- 2.2.1 Firebase Performance Monitoring
- 2.2.2 Sentry Mobile
- 2.2.3 New Relic Mobile
- 2.2.4 其他 APM 工具
- 2.3 网络调试工具
- 2.3.1 Charles Proxy
- 2.3.2 Proxyman
- 2.4 静态扫描工具
- 2.4.1 oclint
- 2.4.2 infer
- 2.4.3 clang-tidy
- 2.5 开源/自研工具
- 2.5.1 Booking.com PerformanceSuite
- 2.5.2 Swift-Metrics
- 2.5.3 DBDebugToolkit
- 2.5.4 FBRetainCycleDetector
- 2.5.5 fishhook
概览
iOS 平台提供了丰富的性能分析工具,覆盖开发调试、生产监控、GPU 分析等多个场景。本文档系统性地介绍了各类性能工具的使用方法和最佳实践。
工具分类
官方工具
- Xcode Instruments:苹果官方提供的性能分析工具集,包含 Time Profiler(CPU)、Allocations/Leaks(内存)、Energy Log(能耗)、Core Animation、Network、File I/O 等,功能全面且深入,适合本地开发和调试阶段。
- XCTest + XCTMetric:苹果官方测试框架,支持性能测试指标(执行时间、内存、CPU),可集成 CI/CD,适合自动化性能回归检测。
- Metal Performance HUD:苹果官方图形性能调试工具,实时显示渲染帧率、GPU 开销等图形相关指标,适合游戏和图形密集型应用。
第三方工具
- 设备管理工具:tidevice、Facebook idb、libimobiledevice、ifuse 等,用于设备连接和数据采集
- 线上监控工具(APM):Firebase Performance、Sentry、New Relic 等,用于生产环境性能监控
- 网络调试工具:Charles Proxy、Proxyman 等,用于网络问题诊断
- 静态扫描工具:oclint、infer、clang-tidy 等,用于代码质量检测
- 开源/自研工具:PerformanceSuite、Swift-Metrics、FBRetainCycleDetector 等,用于自定义监控方案
快速索引
按使用阶段选择:
- 开发阶段:Xcode Instruments + Metal Performance HUD(图形应用)+ Charles/Proxyman(网络调试)
- 测试阶段:XCTest + XCTMetric + Firebase Performance(预发布监控)+ 网络调试工具
- 生产环境:Firebase Performance / Sentry / New Relic(APM)+ PerformanceSuite(自研监控)+ Crashlytics(崩溃监控)
按问题类型选择:
- CPU 热点分析:Time Profiler、System Trace
- 内存泄漏:Leaks、Allocations、FBRetainCycleDetector
- UI 卡顿:Core Animation FPS、Hitches、Runloops
- 启动时间:Time Profiler、自定义 trace
- 网络性能:Charles/Proxyman、Network Link Conditioner
- GPU 性能:Metal Performance HUD、Core Animation Commits
- 能耗分析:Energy Log
按性能开销选择:
- 低开销:Firebase Performance(采样)、XCTest、静态扫描工具
- 中等开销:Sentry(采样 profiling)、New Relic(采样)
- 高开销:Instruments(完整配置)、AddressSanitizer
工具选择建议
以上快速索引提供了不同场景下的工具选择建议。具体工具的使用方法和详细说明请参考后续章节。
业界成熟工具对比
| 工具名称 | 类型 | 主要功能 | 适用场景 | 优势 | 局限 |
|---|---|---|---|---|---|
| Xcode Instruments | 官方 Profiling | CPU、内存、GPU、能耗、网络、I/O 分析 | 本地开发调试 | 功能全面、深入底层、免费 | 学习曲线陡、无法线上监控 |
| Firebase Performance | 线上 APM | 启动时间、网络延迟、屏幕渲染监控 | 生产环境监控 | 集成简单、成本低、Google 生态 | 深度诊断能力有限 |
| Sentry | 错误+性能监控 | 崩溃、慢事务、卡顿、代码级 profiling | 生产环境监控 | 错误和性能统一、profiling 能力强 | 采样率需控制、SDK 大小需考虑 |
| New Relic Mobile | 企业级 APM | 崩溃、网络跟踪、性能趋势、分布式 tracing | 大型应用监控 | 功能全面、多维度分析 | 成本高、集成复杂 |
| Dynatrace | 企业级 APM | AI 驱动问题检测、全栈监控 | 跨平台企业应用 | 智能分析、自动化告警 | 成本高、配置复杂 |
| Charles/Proxyman | 网络调试 | HTTP/HTTPS 抓包、网络性能分析 | 网络问题诊断 | 直观、实时抓包 | 仅覆盖网络层 |
| PerformanceSuite | 开源监控 | TTI、冻结时间、启动时间、UI 渲染 | 自研监控体系 | 高度自定义、轻量 | 需自建后端和 Dashboard |
一、官方工具
1.1 Xcode Instruments
Xcode Instruments 是苹果官方提供的性能分析工具集,功能全面且深入,是 iOS 性能分析的首选工具。它提供了 CPU、内存、I/O、卡顿、能耗等多个维度的分析能力。
1.1.1 基本使用
命令行使用
# 开始采集
xcrun xctrace record --template 'Time Profiler' --attach pid --output 34.trace --device uuid --time-limit 1000ms
# 导出 XML
xcrun xctrace export --input 34.trace --xpath '/trace-toc/run[@number="1"]/data/table[@schema="time-profile"]' --output 34.xml
GUI 使用
- 在 Xcode 中选择 Product > Profile(或按
Cmd+I) - 选择相应的 Instrument 模板
- 点击录制按钮开始采集
- 操作应用,观察性能数据
- 停止录制,分析结果
1.1.2 CPU 分析
System Trace
功能:记录 App 运行过程中线程和内存详细调度信息
特点:
– 一般只能记录 10S 的数据(数据量大)
– 可以查看线程调度、系统调用、内存分配等详细信息
– 适合分析系统级性能问题
使用场景:
– 分析线程调度问题
– 查看系统调用频率
– 诊断多线程竞争问题
Time Profiler
功能:记录应用和线程的 CPU 使用率和线程对应的调用堆栈
原理:
– 默认 1ms 采样一次,只采集在运行线程的调用栈
– 以统计学的方式汇总数据
– 适合粗粒度的分析
优化建议:如果统计出来的时间和实际的时间相差比较多,可以尝试开启:
– High Frequency:降低采样的时间间隔,提高精度
– Record Kernel Callstacks:记录内核的调用栈,可以看到系统调用
– Record Waiting Thread:记录被 block 的线程,可以看到等待时间
使用场景:
– CPU 热点分析
– 函数调用时间统计
– 性能瓶颈定位
System Load
功能:监控系统负载和线程优先级
关键点:线程有优先级,高优先级的线程不应该超过系统核心数量
使用场景:
– 分析线程优先级问题
– 查看系统负载情况
System Call Tree
功能:显示系统调用树,可以看到应用调用了哪些系统 API
使用场景:
– 分析系统调用频率
– 定位系统调用相关的性能问题
Thread State Trace
功能:追踪线程状态变化
关键状态:
– Running:正在运行
– Waiting:等待中
– Suspended:挂起
– Preempted:被抢占
关键点:主要关注挂起和抢占两个状态,记住主线程不是一直在运行的
使用场景:
– 分析线程调度问题
– 查看线程等待时间
– 诊断线程阻塞问题
CPU Counter
功能:监控 CPU 硬件计数器,如指令数、缓存命中率等
使用场景:
– 深入分析 CPU 性能
– 硬件级性能优化
CPU Profiler
功能:CPU 性能分析器,提供更详细的 CPU 使用情况
使用场景:
– 详细的 CPU 性能分析
– 函数级性能优化
Activity Monitor(活动监视器)
功能:记录系统所有进程的活动,可以理解为任务管理器
使用场景:
– 查看系统整体资源使用情况
– 对比不同应用的资源消耗
GCD Performance
功能:分析 Grand Central Dispatch(GCD)的性能
使用场景:
– 分析 GCD 队列使用情况
– 优化并发性能
1.1.3 内存分析
Leaks
功能:检测内存泄漏
内存分类:
- Leaked memory:Memory unreferenced by your application that cannot be used again or freed (also detectable by using the Leaks instrument).
- Abandoned memory:Memory still referenced by your application that has no useful purpose.
重要说明:Instruments 只能检测 Leaked memory,也就是说循环引用的内存无法用 Leaks 检测

使用场景:
– 检测未释放的内存
– 发现内存泄漏问题
局限性:
– 无法检测循环引用导致的内存泄漏
– 需要使用 Allocations 配合检测 Abandoned memory
Allocations
功能:跟踪内存分配情况,可以用于检测 Abandoned memory
检测方法:查看 #persistent 个数是否一直在增长
Mark Generation 功能:
– 通过 mark generation 截取内存快照
– 通过快照对比可以快速的发现内存泄漏
– 对比两个快照之间的内存增长
使用场景:
– 检测内存增长趋势
– 发现内存泄漏(包括循环引用)
– 分析内存分配模式
Virtual Memory Trace
功能:跟踪每个活跃线程的虚拟内存使用情况
关键事件:主要关注 Page In 这个事件,因为启动路径上有很多次 Page In,且相对耗时
使用场景:
– 分析启动性能
– 查看内存分页情况
– 优化内存访问模式
VM Tracker
功能:按标签区域统计进程的虚拟内存使用情况
使用场景:
– 查看内存分布情况
– 分析内存占用结构
– 优化内存使用
1.1.4 IO 分析
Disk I/O Latency
功能:查看每个 I/O 操作的完成时间
使用场景:
– 分析磁盘 I/O 性能
– 定位慢 I/O 操作
– 优化文件读写性能
Disk Usage
功能:记录磁盘 I/O 操作

使用场景:
– 查看磁盘 I/O 频率
– 分析 I/O 模式
– 优化文件操作
Filesystem Suggestions
功能:查看失败的文件操作
使用场景:
– 发现文件操作错误
– 诊断文件系统问题
Filesystem Activity
功能:查看文件的活动操作
使用场景:
– 监控文件访问情况
– 分析文件操作性能
Core Data 相关工具
Core Data Faults:监控 Core Data 的 Fault 操作,用于分析 Core Data 性能和优化数据访问模式。
Core Data Fetches:监控 Core Data 的 Fetch 操作,用于分析 Core Data 查询性能和优化数据查询。
Core Data Saves:监控 Core Data 的 Save 操作,用于分析 Core Data 保存性能和优化数据持久化。
1.1.5 卡顿分析
Hangs
功能:检测应用挂起(Hang)事件
使用场景:
– 发现应用无响应问题
– 分析主线程阻塞
Hitches
功能:检测帧率下降(Hitch)事件
使用场景:
– 分析 UI 卡顿问题
– 优化渲染性能
Core Animation Commits(核心动画提交)
功能:查看动画提交间隔
使用场景:
– 分析动画性能
– 优化动画流畅度
Core Animation FPS(核心动画帧率)
功能:查看视频帧的渲染帧率
使用场景:
– 监控帧率稳定性
– 分析渲染性能
Advanced Graphics Statistics(高级图形统计)
功能:查看图形驱动相关的统计,属于低层次硬件相关的统计数据
使用场景:
– 深入分析 GPU 性能
– 硬件级图形优化
Display(显示)
功能:监控显示相关的性能指标
使用场景:
– 分析显示性能
– 优化渲染流程
Runloops
功能:分析 Runloop 的性能
使用场景:
– 分析主线程性能
– 优化事件处理
1.1.6 能耗分析
Energy Log
功能:监控应用的能耗情况
关键指标:
– CPU 使用率
– 网络活动
– 定位服务使用
– 屏幕亮度
– GPU 使用
使用场景:
– 优化电池续航
– 分析能耗热点
– 减少不必要的资源消耗
1.2 XCTest + XCTMetric
简介:苹果官方测试框架,支持性能测试指标
主要功能:
– 执行时间测试
– 内存使用测试
– CPU 使用测试
– 可集成 CI/CD
优势:
– 官方支持,稳定可靠
– 适合自动化性能回归检测
– 与 Xcode 集成良好
使用场景:
– 自动化性能测试
– CI/CD 集成
– 性能回归检测
集成方式:
func testPerformance() {
measure {
// 需要测试性能的代码
}
}
func testMemoryUsage() {
measure(metrics: [XCTMemoryMetric()]) {
// 需要测试内存的代码
}
}
1.3 Metal Performance HUD
简介:苹果官方图形性能调试工具
主要功能:
– 实时显示渲染帧率
– GPU 开销监控
– 图形相关指标展示
优势:
– 官方工具,稳定可靠
– 实时监控,无需额外配置
– 适合图形密集型应用
使用场景:
– 游戏性能调试
– 图形密集型应用优化
– GPU 性能分析
使用方法:
1. 在 Xcode 中运行应用
2. 在设备上启用 Metal Performance HUD(设置 > 开发者 > Metal Performance HUD)
3. 实时查看 GPU 性能指标
二、第三方工具
2.1 设备管理工具
2.1.1 基本原理
数据采集方式
卡顿堆栈和线程快照采集
- 使用
ktrace里面的kdebug采集卡顿数据 - 使用
ktrace里面的kperform采集线程快照
数据访问方式
使用苹果提供的后门服务,端口号 62078
ktrace:内核追踪工具dtrace:动态追踪工具
ktrace 数据获取工具
通过苹果的 62078 端口,可以使用以下工具:
– libimobiledevice (mobiledevice)
– Facebook idb
– 阿里 tidevice
2.1.2 工具介绍
阿里 tidevice
简介:阿里开源的工具,通过苹果 62078 端口访问设备
功能:
– 支持 ktrace、dtrace 等数据采集
– 设备管理
– 性能数据采集
安装:
pip install tidevice
使用示例:
# 查看设备列表
tidevice list
# 启动应用
tidevice launch com.example.app
# 性能监控
tidevice perf
Facebook idb
简介:Facebook 开源的 iOS 设备管理工具
功能:
– 设备管理
– 性能数据采集
– 应用调试
安装:
brew tap facebook/fb
brew install idb-companion
pip install fb-idb
使用示例:
# 查看设备
idb list-targets
# 启动应用
idb launch com.example.app
libimobiledevice
简介:跨平台 iOS 设备通信库
功能:
– 设备管理
– 数据访问
– 文件传输
安装:
brew install libimobiledevice
使用示例:
# 查看设备
idevice_id -l
# 获取设备信息
ideviceinfo
ifuse
简介:iOS 挂载文件系统工具
安装步骤:
- ifuse 是一个依赖 libimobiledevice 库的工具,所以必须首先安装 libimobiledevice
- 首先去 https://osxfuse.github.io/ 下载 fuse for macOS 的库
- 然后 GitHub 上 clone 下载 ifuse 最新源码到本地
./autogen.sh
./configure
make
make install
# 挂载会议文件系统
ifuse --container com.tencent.meeting.dev meeting_log
# 会议日志目录
/Users/zhengjunming/Documents/mj_git/meeting_log/Library/Application Support/com.tencent.meeting.dev/Global/Logs
Developer Disk Image 路径:
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport
2.2 线上监控工具(APM)
2.2.1 Firebase Performance Monitoring
简介:Google 提供的生产环境性能监控 SDK
主要功能:
– 自动采集启动时间
– 网络请求延迟监控
– 屏幕渲染性能监控
– 自定义 trace 和 metric
优势:
– 集成简单,开箱即用
– 成本低(免费额度较高)
– Google 生态整合好
– 实时用户数据对比
局限性:
– 深度诊断能力有限
– 采样频率需要额外配置
– 复杂问题定位不够精细
集成方式:
// Podfile
pod 'Firebase/Performance'
// 使用
Performance.startTrace("custom_trace")
// ... 代码执行 ...
Performance.stopTrace("custom_trace")
2.2.2 Sentry Mobile
简介:错误跟踪和性能监控平台
主要功能:
– 崩溃和异常捕获
– 慢事务监控
– 卡顿检测
– 代码级 profiling
– Session replay
优势:
– 错误和性能统一监控
– Profiling 能力强
– Dashboard 可视化直观
– 支持按版本/设备/用户分组
局限性:
– 采样率需控制(避免 overhead)
– SDK 大小需考虑
– 某些功能仍在 beta 阶段
集成方式:
// Podfile
pod 'Sentry'
// 初始化
SentrySDK.start { options in
options.dsn = "your-dsn"
options.enableProfiling = true
}
2.2.3 New Relic Mobile
简介:企业级 APM 工具
主要功能:
– 实时崩溃监控
– 网络调用跟踪
– 性能趋势分析
– 分布式 tracing
– 错误分组和 triage
优势:
– 功能全面
– 多维度分析
– 适合大型应用
– 与后端 APM 整合
局限性:
– 成本高
– 集成复杂
– SDK 大小和依赖需注意
适用场景:
– 大型或中型企业应用
– 对性能和稳定性要求高
– 希望前后端统一监控
2.2.4 其他 APM 工具
Dynatrace
特点:
– AI 驱动问题检测
– 全栈监控(移动端 + 后端)
– 自动化告警
– 适合跨平台企业应用
Datadog
特点:
– 云监控平台
– 跨平台监控
– APM + 日志分析
– 适合云环境和混合环境
AppDynamics
特点:
– 企业级 APM
– 端到端监控
– 用户体验、后端接口、崩溃、事务等多维度分析
2.3 网络调试工具
2.3.1 Charles Proxy
简介:HTTP/HTTPS 抓包工具
主要功能:
– HTTP/HTTPS 请求抓包
– 请求响应时间分析
– Payload 大小分析
– 模拟网络延迟
– 模拟离线环境
– 请求重写和断点调试
优势:
– 界面直观
– 实时抓包
– 功能强大
– 跨平台支持
使用场景:
– 网络问题诊断
– API 接口调试
– 网络性能分析
– 接口 Mock
配置 HTTPS 解密:
1. 安装 Charles 根证书
2. 在 iOS 设备上信任证书
3. 配置 SSL Proxying
2.3.2 Proxyman
简介:macOS 专用的网络调试工具
主要功能:
– HTTP/HTTPS 抓包
– HTTPS 解密
– 网络性能分析
– 请求重写
– 脚本支持
优势:
– 界面友好
– macOS 原生应用
– 性能优秀
– 功能全面
使用场景:
– macOS 开发环境网络调试
– iOS 应用网络问题诊断
– API 接口测试
2.4 静态扫描工具
2.4.1 oclint
简介:静态代码分析工具
功能:
– 代码质量检测
– 潜在问题发现
– 代码规范检查
– 性能问题检测
集成方式:
# 安装
brew install oclint
# 使用
oclint-json-compilation-database -- -report-type html -o report.html
使用场景:
– CI/CD 集成
– 代码质量检查
– 代码审查辅助
2.4.2 infer
简介:Facebook 开源的静态分析工具
功能:
– 内存泄漏检测
– 空指针检测
– 资源泄漏检测
– 并发问题检测
集成方式:
# 安装
brew install infer
# 使用
infer run -- xcodebuild -workspace App.xcworkspace -scheme App
使用场景:
– 内存问题检测
– 并发问题发现
– 代码质量提升
2.4.3 clang-tidy
简介:LLVM 提供的静态分析工具
功能:
– C/C++/Objective-C 代码检查
– 代码规范检查
– 性能问题检测
– 现代化代码建议
集成方式:
# 使用
clang-tidy file.m -- -I/path/to/include
使用场景:
– Objective-C/C++ 代码检查
– 代码现代化
– 性能优化建议
2.5 开源/自研工具
2.5.1 Booking.com PerformanceSuite
简介:开源性能监控库
主要功能:
– TTI(Time-to-Interactive)监控
– 冻结时间检测
– 启动时间监控
– UI 渲染指标
– Watchdog 终止异常检测
优势:
– 开源免费
– 高度自定义
– 轻量级
– 适合自研监控体系
局限性:
– 需自建后端和 Dashboard
– 需要一定的开发成本
适用场景:
– 需要自定义监控指标
– 希望控制数据采集和存储
– 预算有限的项目
2.5.2 Swift-Metrics
简介:Swift 指标 API
主要功能:
– Counter、Gauge、Timer 等指标接口
– 便于集成 Prometheus、OpenTelemetry 等后端
– 标准化指标收集
优势:
– 标准化 API
– 易于集成
– 支持多种后端
适用场景:
– 需要标准化指标收集
– 集成 Prometheus/OpenTelemetry
– 微服务架构
2.5.3 DBDebugToolkit
简介:iOS 调试工具集
主要功能:
– 运行时调试能力
– UI 调试工具
– 网络请求查看
– 数据库查看
优势:
– 功能全面
– 易于集成
– 开发阶段实用
适用场景:
– 开发阶段调试
– 快速问题定位
2.5.4 FBRetainCycleDetector
简介:Facebook 开源的循环引用检测工具
主要功能:
– 检测循环引用
– 内存泄漏检测
– 运行时分析
优势:
– 开源免费
– 检测准确
– 易于集成
适用场景:
– 内存泄漏检测
– 循环引用排查
2.5.5 fishhook
简介:Facebook 开源的函数 hook 工具
主要功能:
– 函数 hook
– 运行时拦截
– 性能监控基础工具
优势:
– 开源免费
– 功能强大
– 适合高级用法
适用场景:
– 自定义性能监控
– 函数调用拦截
– 高级调试需求
