在活动监视器中对目标进程执行“取样进程”,可获得3–5秒内含线程id、函数频次与调用路径的纯文本堆栈快照,用于精准定位卡顿、高cpu或死循环的函数级原因。
直接在活动监视器里对单个进程执行“取样进程”,就能拿到它在3秒内的真实运行堆栈快照——这不是图表,也不是统计汇总,而是一份带线程id、函数调用频次和调用路径的纯文本报告,专为定位卡顿、高cpu或死循环的函数级原因而设计。
快速定位并选中目标进程
打开活动监视器(Spotlight 搜索或“应用程序 > 实用工具”),切换到“所有进程”视图以便看清父子关系。用右上角搜索框输入进程名(如“Safari”“Slack”“node”)快速过滤;若想优先排查问题对象,可在“CPU”或“能耗”标签页按占用率排序,点击列标题升序/降序,找出持续高于70%的进程再选中。触发一次有效的堆栈采样
确保进程已被选中后,点击窗口右上角的“系统诊断选项”(图标为齿轮或齿轮+问号),从下拉菜单中选择“取样进程”。采样自动运行约3–5秒,期间建议同步复现问题行为(比如点击按钮、开始上传、加载网页),让堆栈捕捉到真实瓶颈场景。完成后报告会在 TextEdit 中以纯文本形式打开。重点看懂报告里的堆栈线索
- 报告开头会标明采样时长、PID、进程名和架构(Intel 或 Apple Silicon) - 每个“Thread N”块展示该线程的完整调用栈,函数按采样频次从高到低排列 - 高频出现在多个线程顶部的函数(如 `objc_msgSend`、`dispatch_worker_thread`、`CFNetwork` 相关函数)往往是性能热点 - 若看到大量 `mach_msg_trap`、`__psynch_cvwait` 或 `pthread_cond_wait`,说明线程正阻塞在锁、网络响应或I/O等待上 - SSL/TLS 函数(如 `SSL_do_handshake`)频繁出现在栈底,可能指向握手延迟;`read`/`write` 系统调用长时间未返回,则提示底层 I/O 卡顿让结果更可靠的操作建议
- 在进程明显卡顿、界面无响应或 CPU 占用突增时立即采样,避开空转时段 - 对同一进程间隔几秒做2–3次采样,比对哪些函数路径稳定高频出现——稳定即为真实瓶颈 - 采样前关闭无关应用(尤其浏览器多标签、iCloud 同步、Dropbox),减少线程噪声干扰 - 报告支持全选复制,可粘贴进编辑器搜索关键词(如 “wait”、“SSL”、“lock”、“fsync”),也便于提交给开发者或 Apple 支持团队不复杂但容易忽略









