活动监视器不直接标注“存储密集型进程”,需通过磁盘行为特征识别:持续>10 mb/s写入超15秒,或写入次数/秒>2000且单次量小。
活动监视器本身不直接标注“存储密集型进程”,但你可以通过磁盘行为特征锁定目标,再用堆栈采样定位其底层 i/o 瓶颈函数。关键不是看它写了多少字节,而是看它怎么写、为什么写、卡在哪一层。
先识别真正存储密集的进程
打开活动监视器 → 切换到“磁盘”标签页 → 确保显示“读取字节/秒”和“写入字节/秒”列(右键表头勾选)。注意两类信号:
- 持续 >10 MB/s 的写入速率且维持 15 秒以上,常见于 Time Machine 备份、Final Cut Pro 媒体缓存、Docker 镜像导入;
- “写入次数/秒”极高(>2000)但单次写入量小(平均
- 配合“内存”标签页观察:若某进程“已修改”内存高 + “写入字节/秒”同步飙升,大概率在执行脏页回写(dirty page writeback)。
执行针对性堆栈采样
选中该进程后,点击右上角“系统诊断选项”(齿轮+文档图标)→ 选择“取样进程”。采样期间务必让存储操作处于活跃状态:
- 如果是备份任务,等它刚进入“正在传输文件”阶段再点取样;
- 如果是编译或构建,触发一次完整 rebuild 并在中间 2–3 秒内采样;
- 避免在空闲或初始化阶段采样,否则报告里全是 init 或 idle 调用栈,无诊断价值。
从报告中抓取存储相关瓶颈线索
报告是纯文本,重点关注以下模式:
- 频繁出现 fsync、msync、pwritev、writev 或 fdatasync:说明应用主动要求落盘,可能因配置了强一致性(如数据库 sync_mode=sync)或日志强制刷盘;
- 大量 __psynch_cvwait、pthread_cond_wait 出现在调用栈中部:线程在等 I/O 完成,但设备响应慢(如外接 USB 机械硬盘、加密卷解密延迟);
- objc_msgSend 或 swift_release 高频出现在栈顶,且调用路径含 FileManager、URLSession 或 CoreData:Objective-C/Swift 层封装导致大量小文件操作未合并,或自动引用计数(ARC)在高频 I/O 回调中引发额外开销;
- 底部反复出现 APFS 相关函数(如 apfs_vnop_write、apfs_btree_search)或 hfs_vnop_write:文件系统层成为瓶颈,可能因元数据碎片、快照积压或加密卷性能下降。
交叉验证与排除干扰
单次采样易受噪声影响,建议:
- 对同一场景做 3 次采样(间隔 20 秒),比对高频函数是否稳定重复;
- 在“能耗”标签页中查看该进程“能源影响”是否同步升高——高 I/O 通常伴随高能耗,若不升高,可能是缓存命中或虚假热点;
- 右键进程 → “在 Finder 中显示”,确认它是你预期的应用主二进制,而非同名的 helper 进程(如 com.apple.Safari.SafeBrowsing);
- 关闭其他磁盘活跃应用(如 Dropbox、iCloud Drive 同步),防止采样被无关线程污染。











