ARTICLE · Engineering Systems
Windows 睡眠、休眠与电源计划:一份可验证的排查指南
从 powercfg 的实际输出出发,区分 S3、S4 与 Modern Standby,并用受支持的命令排查合盖、唤醒和电源计划问题。
Windows 的“睡眠”不是单一实现。遇到合盖断网、无法唤醒、待机耗电或电源计划消失时,第一步不是套用网上的注册表补丁,而是确认这台机器实际支持哪一种电源模型。
本文只使用 Windows 公开支持的界面和命令。微软明确说明:在传统 S3 与 Modern Standby 之间切换并不是受支持的配置操作,不能把修改注册表视为可靠方案;如果设备平台要改用另一种模型,需要重新安装完整操作系统。
1. 先分清 S3、S4 与 Modern Standby
| 状态 | 数据保存位置 | 断电后能否恢复 | 典型特征 |
|---|---|---|---|
| S3(传统睡眠) | 内存仍被供电并刷新 | 通常不能;若同时启用“混合睡眠”,系统还会把内容写入休眠文件,意外断电后才可能恢复 | 大部分硬件进入低功耗状态 |
| S4(休眠) | 内存内容写入非易失性的休眠文件 | 可以 | 恢复通常比从 S3 更慢,但不需要持续给内存供电 |
| Modern Standby(S0 低功耗空闲) | 系统保持在 S0,并在活跃与低功耗阶段之间切换 | 不能把它等同于 S4 | 可能显示“网络连接”或“网络断开”,由设备设计和策略决定 |
微软没有为这些状态承诺统一的“几秒唤醒时间”。实际恢复时长会受固件、驱动、存储、外设和系统负载影响。
直观地说,S3 像“暂停后让内存继续通电”,S4 像“把内存状态写入休眠文件后关掉大部分硬件”;Modern Standby 则仍处于 S0,只是在活跃与低功耗阶段之间快速切换。这个类比只帮助理解,不替代 powercfg /a 对本机能力的判断。
先在终端运行:
powercfg /a
只按当前输出解释:
- 出现“待机 (S3)”:这台系统当前支持传统 S3。
- 出现“待机 (S0 低电量空闲)”:这台系统使用 Modern Standby。
- Modern Standby 后若标注“网络已连接”或“网络已断开”,它描述的是该平台支持的待机网络模式,不代表 SSH 会话一定持续。
- 某个状态列在“以下睡眠状态在此系统上不可用”中,就不要用注册表强行“解锁”。
参考:System Power States、Modern Standby、Modern Standby validation overview。
2. 查看和设置合盖动作
先查看当前电源计划的合盖设置:
powercfg /query SCHEME_CURRENT SUB_BUTTONS LIDACTION
LIDACTION 的公开取值为:
| 值 | 动作 |
|---|---|
| 0 | 不采取操作 |
| 1 | 睡眠 |
| 2 | 休眠 |
| 3 | 关机 |
图形界面的入口是:
控制面板 → 硬件和声音 → 电源选项 → 选择关闭盖子的功能
也可以打开对应控制面板页面:
control.exe /name Microsoft.PowerOptions
微软仍记录了旧式 powercfg.cpl 调用方式,但新的 canonical name 更清楚。
如果只是希望接通电源时合盖继续运行,建议只改交流电:
powercfg /setacvalueindex SCHEME_CURRENT SUB_BUTTONS LIDACTION 0
powercfg /setactive SCHEME_CURRENT
电池供电时仍可保留睡眠,以免放进包里后持续发热。确实需要修改电池行为时,再显式执行:
powercfg /setdcvalueindex SCHEME_CURRENT SUB_BUTTONS LIDACTION 0
powercfg /setactive SCHEME_CURRENT
参考:Lid switch close action、Executing Control Panel items。
3. 合盖不睡眠,不等于远程连接一定在线
把合盖动作设为“不采取操作”,只能避免“合盖”这一事件直接触发睡眠。下面这些因素仍可能中断远程连接:
- Modern Standby 进入网络断开模式;
- 网卡驱动或适配器电源管理关闭设备;
- 系统更新、重启或网络切换;
- SSH 服务停止、监听地址变化或防火墙策略变化;
- 笔记本散热条件变差,触发降频或保护。
因此,远程使用前应分别验证:系统没有进入睡眠、网卡仍在线、SSH 服务仍在监听,以及合盖后的温度和通风条件可接受。
4. 用正确的报告回答不同问题
这些命令的用途不能互换。
即时线索
powercfg /lastwake
powercfg /devicequery wake_armed
powercfg /waketimers
powercfg /requests
/lastwake:报告最近一次睡眠转换的唤醒信息。/devicequery wake_armed:列出当前允许唤醒系统的设备。/waketimers:列出活动的唤醒计时器。/requests:列出应用程序和驱动当前提出的电源请求;它适合解释“为什么现在不睡”,不是历史睡眠报告。
历史报告
在管理员终端中可生成:
powercfg /systemsleepdiagnostics /output "$env:USERPROFILE\Desktop\system-sleep-diagnostics.html"
powercfg /systempowerreport /output "$env:USERPROFILE\Desktop\system-power-report.html"
/systemsleepdiagnostics:分析最近一段时间内用户不在场的区间,以及系统是否进入睡眠;需要管理员权限。/systempowerreport:报告系统电源转换,包括连接待机相关转换;需要管理员权限。
只有设备使用 Modern Standby 时,/sleepstudy 才是对应的待机质量报告:
powercfg /sleepstudy /output "$env:USERPROFILE\Desktop\sleepstudy.html"
在传统 S3 机器上,不要把 SleepStudy 当作通用睡眠诊断工具。
参考:Powercfg command-line options。
5. 事件查看器只能作为辅助证据
可以在“事件查看器 → Windows 日志 → 系统”中按时间检查电源转换。常见线索包括:
- Provider 为
Microsoft-Windows-Kernel-Power、事件 ID 42:常见于系统进入睡眠; - Provider 为
Microsoft-Windows-Power-Troubleshooter、事件 ID 1:常见于系统从低功耗状态恢复,并可能记录唤醒来源。
应同时核对 Provider、事件 ID、时间和事件正文,不要只凭一个数字判断原因。Windows 版本、驱动和电源模型不同,实际记录也可能不同;powercfg 报告与设备日志才是更完整的上下文。
具体操作是:
- 按
Win + R,运行eventvwr.msc; - 打开“Windows 日志 → 系统”;
- 以复现问题的准确时间为中心筛选,而不是先假定某个事件 ID;
- 同时查看
Kernel-Power、Power-Troubleshooter等 Provider 的事件正文; - 把睡眠、唤醒、重启、网卡掉线分别记录,避免把“SSH 断开”直接当成“机器睡眠”。
6. 电源计划:只操作本机实际存在的 GUID
先列出并确认当前计划:
powercfg /list
powercfg /getactivescheme
切换、复制或删除时,使用 /list 返回的真实 GUID:
powercfg /setactive <PLAN_GUID>
powercfg /duplicatescheme <EXISTING_PLAN_GUID>
powercfg /delete <PLAN_GUID>
删除前先确认目标不是当前活动计划,并保留至少一个可用计划。
“卓越性能”不是所有 Windows 设备都会提供的通用计划。它最初面向工作站场景,会以更高能耗换取更少的微延迟;只有当 powercfg /list 确实列出它时,才应把它当作可选项。
不能把三种电源计划简单写成固定的处理器百分比。更合适的比较是:
| 计划/模式 | 设计倾向 | 不能据名称直接断言的内容 |
|---|---|---|
| 平衡 | 根据负载在能耗与响应之间调整 | 最低频率、风扇策略和瞬时性能 |
| 高性能 | 减少部分节能带来的响应延迟 | CPU 一定锁定基准频率或所有设备都禁用节能 |
| 卓越性能 | 面向部分工作站减少微延迟 | 所有 Windows 版本都提供、一定快于厂商性能模式 |
实际差异必须用 powercfg /query、厂商控制软件、功耗和任务基准共同确认。
Modern Standby 系统只允许“平衡”或由“平衡”派生的计划。若设置页面可用,更合适的性能入口通常是:
设置 → 系统 → 电源和电池 → 电源模式 → 最佳性能
设备厂商的性能模式还可能同时调整风扇、功率限制和固件策略,不能由一个通用 powercfg 命令完全替代。
参考:Power policy settings、Change the power mode for your Windows PC。
7. 处理器最小状态不是“整机性能百分比”
PROCTHROTTLEMIN 表示处理器最小性能状态相对于最大处理器性能的百分比。它只是电源计划中的一个 CPU 子设置,不代表整机性能,也不能把普通计划“变成”另一个计划。
查看当前值:
powercfg /query SCHEME_CURRENT SUB_PROCESSOR PROCTHROTTLEMIN
powercfg /query SCHEME_CURRENT SUB_PROCESSOR PROCTHROTTLEMAX
长期把最小状态设得很高,可能增加空闲功耗、温度和风扇噪声,而且未必改善实际任务性能。优先选择 Windows 或厂商提供的性能模式,再用基准测试和温度数据验证效果。
如果确有可重复的延迟问题,可以在记录原值后做单变量实验。下面是受支持的设置语法,MIN_PERCENT 与 MAX_PERCENT 必须替换为 0–100 的实际整数:
powercfg /setacvalueindex SCHEME_CURRENT SUB_PROCESSOR PROCTHROTTLEMIN MIN_PERCENT
powercfg /setacvalueindex SCHEME_CURRENT SUB_PROCESSOR PROCTHROTTLEMAX MAX_PERCENT
powercfg /setactive SCHEME_CURRENT
测试后用同样命令恢复先前查询到的值。把两者都设为 100 只改变当前计划的两个处理器参数,不等同于“卓越性能”,也不包含 USB、存储、PCIe、显示和厂商固件策略。
参考:Minimum processor performance state。
8. 一条可复现的排查顺序
- 运行
powercfg /a,记录这台机器当前的电源模型。 - 运行
powercfg /getactivescheme与合盖设置查询,确认正在修改正确的计划。 - 复现一次问题,并准确记录合盖、睡眠、断网和恢复的时间。
- 用
/lastwake、/waketimers、/requests检查即时原因。 - 按电源模型生成
systemsleepdiagnostics、systempowerreport,Modern Standby 再加sleepstudy。 - 把报告时间线与事件查看器中的 Provider、事件 ID 和正文交叉验证。
- 每次只改一个设置,复测后再决定是否保留。
这套流程的重点是先辨认状态,再选择证据。它比复制固定 GUID、硬编码唤醒时间或使用未受支持的注册表切换更可靠,也更容易回退。
9. 已撤回的操作记录(历史,不是当前建议)
不要照抄本节命令。 这一节记录一次已经撤回的排查过程,用来说明相关风险。尤其不要通过
PlatformAoAcOverride试图在 S3 与 Modern Standby 之间切换;微软不支持这种转换,执行后还可能暂时出现所有睡眠状态均不可用。当前建议仍是按前八节先确认本机能力,再使用受支持的设置。
“睡眠像打盹、休眠像把手头工作写进笔记本再睡”可以帮助区分 S3 与 S4;“睡眠约 1–2 秒、休眠约 20–30 秒”则只是某台设备上的粗略感受,不能作为 Windows 或其他电脑的保证。
历史排查中还使用过复制传统“高性能”和“卓越性能”模板的命令:
# 历史记录:不保证模板在当前设备或 Windows 版本中存在
powercfg /duplicatescheme 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c
powercfg /duplicatescheme e9a42b02-d5df-448d-aa00-03f14749eb61
/duplicatescheme 本身是受支持的语法,但固定模板 GUID 是否存在、复制后是否显示,以及设备是否允许切换到该计划,都必须以本机 powercfg /list 的输出为准。Modern Standby 设备常把可见配置收敛到“平衡”计划及电源模式,不能据此断定命令失败或系统损坏。
下面是一套曾采用、现已撤回的注册表切换流程,仅用于说明为什么本文改成了可验证的排查方法:
# 已撤回的历史做法:不要执行
reg add HKLM\SYSTEM\CurrentControlSet\Control\Power /v PlatformAoAcOverride /t REG_DWORD /d 0 /f
# 当时的记录是在重启后复制并激活电源计划,随后删除该项并再次重启
reg delete HKLM\SYSTEM\CurrentControlSet\Control\Power /v PlatformAoAcOverride /f
当时在一台机器上观察到:删除该项并恢复 S0 后,先前创建的计划仍留在列表中。这只是一次历史观察,既不能证明切换受支持,也不能推广到另一台设备。若已经执行过类似修改,应先保存 powercfg /a、powercfg /list 和注册表当前状态,再根据设备厂商与微软文档恢复,不要继续叠加更多网络教程中的补丁。