WindowServer 占用 CPU 过高怎么办
WindowServer 是 macOS 的显示合成器。动画、屏幕共享或调整显示器时,CPU 占用升高很正常。真正值得排查的是空闲时持续高负载,并且同时出现卡顿、发热或续航下降。
WindowServer 在做什么
每个窗口、菜单、动画和像素,最终都由 WindowServer 组合到显示器上。图形负载因此可能记在 WindowServer 名下,而不是发起重绘的应用名下。它常常只是负载的承接者。
常见的高负载来源
- 大量窗口和桌面空间: 所有窗口和虚拟桌面都要跟踪与合成
- 高分辨率或多台显示器: 4K、5K 和多显示器会增加像素总量
- 缩放分辨率: 部分「看起来像」模式会先渲染更大的表面再缩小。成本取决于 Mac、显示器、缩放模式和任务,Retina 缩放本身不是故障
- 透明与动态效果: 菜单、程序坞和控制中心的模糊与半透明需要实时计算
- 频繁重绘的应用: 例如高速输出的终端或后台动画网页
- 录屏和远程显示: 屏幕录制、视频通话、AirPlay、远程桌面和虚拟显示工具都会增加采集或合成工作
- 高刷新率与动态壁纸: 更多帧和持续变化的像素会抬高负载
逐项降低负载
- 打开「系统设置 > 辅助功能 > 显示」,尝试降低透明度。Apple 的显示设置说明介绍了视觉变化。用同一场景对比后再决定是否保留
- 在「辅助功能 > 动态效果」中尝试减弱动态效果。Apple 的动态效果说明列出了受影响的动画
- 可以测试默认缩放或较低刷新率,再重复相同任务,如果文字明显更难读,这项交换通常不值得
- 关闭不用的窗口和桌面空间,退出后台频繁重绘的应用
- 一次暂停一项录屏、远程桌面、动态壁纸或虚拟显示工具
- 断开一台显示器做对比。基础负载明显变化后,再分别检查缩放、刷新率、线缆和转接器
注销会重启用户显示会话,重启也可能暂时掩盖会再次触发的重绘故障,因此记录问题状态比马上重启更有诊断价值。
瞬时百分比很容易误导,更有参考价值的是在同一个空闲画面下观察几分钟,复现问题后只移除一个可疑来源。数值和实际症状都改善时,修改才算有证据支持。
合成和缩放为什么会消耗资源
应用先把内容绘制到各自的离屏缓冲区,也叫 backing store。WindowServer 再把它们组合成每台显示器的最终画面,并应用变换与视觉效果。
场景变化就会触发合成,因此持续重绘和画面采集会不断占用 CPU 或 GPU。部分缩放模式还要渲染较大的中间表面再缩小,但它只是因素之一。像素总量、刷新率、显示器数量和重绘频率应分别测试。
「活动监视器」或 Mole 的「状态」页可以显示 WindowServer、CPU 和 GPU 趋势,但无法自动把合成成本准确归给某个应用。可靠方法是每次停掉一个重绘来源,或只改变一个显示变量,再比较空闲与工作状态。
强制退出 WindowServer 只会中断显示会话,普通 Retina 缩放也不构成故障。受控对比更容易分清问题来自应用重绘、采集工具、显示器、缩放还是刷新率。