macos性能日志分散在多个子系统中,需通过关键词(如timeout、throttled)和子系统(如com.apple.kernel)筛选,结合log show和log stream命令定位延迟、资源耗尽等性能问题。
macos 的系统性能日志并不以“performance”为独立类别存在,而是分散在多个子系统中,比如 com.apple.kernel(内核调度/内存)、com.apple.xpc.launchd(进程启动延迟)、com.apple.diskmanagement(磁盘 i/o)、com.apple.networking(网络延迟)等。要过滤出真正反映性能问题的日志,关键不是找一个叫“性能日志”的标签,而是锁定高延迟、超时、资源耗尽、调度失败等典型信号。
用 log show 筛选含性能线索的关键关键词
终端中执行以下命令,可快速抓取与性能下降强相关的原始消息:
- 查延迟与超时:`log show --predicate 'eventMessage contains[c] "timeout" OR eventMessage contains[c] "delay" OR eventMessage contains[c] "slow"' --last 1h`
- 查资源瓶颈:`log show --predicate 'eventMessage contains[c] "out of memory" OR eventMessage contains[c] "throttled" OR eventMessage contains[c] "exhausted"' --last boot`
- 查磁盘/IO 性能异常:`log show --predicate 'subsystem == "com.apple.diskmanagement" AND (eventMessage contains[c] "hang" OR eventMessage contains[c] "stuck")' --last 24h`
按子系统聚焦核心性能模块
不同子系统承载不同维度的性能数据,直接限定比全盘扫描更高效:
- 内核级调度与内存压力:`log show --predicate 'subsystem contains "com.apple.kernel" AND level >= error' --last boot`
- launchd 启动慢或服务卡顿:`log show --predicate 'process == "launchd" AND eventMessage contains[c] "took"' --last 1h`(常含“took X seconds”字样)
- 图形与窗口服务响应延迟:`log show --predicate 'subsystem == "com.apple.WindowServer" AND eventMessage contains[c] "lag" OR eventMessage contains[c] "frame drop"' --last 30m`
导出并分析一段时间内的性能事件流
把连续时间段的性能相关日志导出为结构化文本,便于人工比对或后续 grep 分析:
- 执行:
log show --predicate '(eventMessage contains[c] "timeout" OR eventMessage contains[c] "throttled" OR subsystem == "com.apple.kernel")' --start "2026-07-07 09:00:00" --end "2026-07-07 17:00:00" --style syslog > ~/Desktop/perf_log_20260707.txt - 生成的文件按传统 syslog 格式排列,时间戳清晰,方便用文本编辑器搜索或用
grep -E "(timeout|throttled)" perf_log_20260707.txt二次筛选
配合实时流观察瞬时性能抖动
若问题偶发且难以复现,可用 log stream 实时监听:
- 运行:
log stream --predicate 'subsystem == "com.apple.kernel" AND (eventMessage contains[c] "throttle" OR eventMessage contains[c] "low memory")' - 保持终端窗口开启,当系统突然变卡、风扇狂转或界面掉帧时,立即查看是否有新日志刷出——这类即时反馈比回溯历史日志更准











