SuperAPI AI 工具集

macos-performance-triage

部署与运维

查看项目

更新于 10-15 23:49

技能介绍

用途:在 Mac 发热、噪音大或变慢时,实时找出驱动负载的进程;尤其能把 WindowServer 的高 CPU/GPU 归因到某个客户端应用。仅限 macOS(powermetrics、sample、spindump、Instruments 及 macmon 读取的 Apple Silicon 电源计数器均为 Darwin 专有)。

主要方法:采用 USE(Utilization、Saturation、Errors)思路。WindowServer 自身不产生工作,它每个周期的消耗都来自客户端应用的绘制/动画/合成,因此 WindowServer 高负载是症状,需找到喂给它的应用(持续视频、GIF/Lottie 动画、软件渲染路径、布局抖动)。macOS 无 eBPF/bpftrace,DTrace 又因 SIP 无法跟踪系统进程(含 WindowServer)。

必要用法:先快照进程,ps -Aceo pid,pcpu,pmem,comm -r | head -16;再用 macmon 读取功耗/温度,macmon pipe -s 1 | jq -c '{cpu_W:.cpu_power, gpu_W:.gpu_power, ane_W:.ane_power, ecpu_usage, pcpu_usage, gpu_usage, temp}'。工具缺失可安装:brew install macmon bottom samply hyperfine。归因 GPU 成本用 sudo powermetrics --samplers tasks --show-process-gpu -n 1 -i 1000,也可用活动监视器 GPU 列、Instruments 的 Core Animation 或 Metal System Trace、Quartz Debug。深挖自有进程用 samply record ./my-program 或 samply record --pid 12345;A/B 比较用 hyperfine --warmup 3 './old-build args' './new-build args'。

常见情况:OrbStack Helper 在退出应用后仍以 PPID 1 运行,可用 orb stop 停止(勿用 kill);后台 Electron 应用离屏动画;浏览器标签的视频/WebRTC/canvas。若安全栈进程同时升高则属 exec storm,应改用 endpoint-security-cpu。输出应包含热点进程的 CPU/GPU/功耗数据、WindowServer 的归因应用与原因、建议操作(关闭/停止、降低设置或继续剖析),并区分真实工作负载下限与可修复的失控。

限制:Chrome/Electron 渲染进程受沙箱保护,samply 无法有效观测,应改用应用自带 chrome://tracing 或 DevTools Performance;sample/spindump 无法指出哪个客户端驱动 WindowServer。其他未提及的平台与功能暂未提供。