蛤?新买的Macbook pro M5合盖一晚掉13%的电? 让我来拯救你的mac电池

上上周刚买的新Macbook pro M5,上周有一天我合上 Mac扔进包里,100% 电量。第二天拿出来------87%,没有休眠吗?这样下去电池一年估计就得打8折吧?

简单搜了下,这显然不是个例。翻了下 V2EX 和苹果 fans 博客,一堆人遇到同样的事。有人甚至合盖一晚直接关机,第二天开不了。

今天我花了点时间翻研究这个问题(主要还是claude,哈哈),总算把这事儿彻底搞明白了。结论先说:你的 Mac 合盖之后根本没有真正休眠,WiFi 和一堆后台进程每隔十几分钟就把它叫醒一次。 但是这种唤醒对大部人来说都毫无意义。

先别急着改设置,看看你的 Mac 到底在干嘛

打开终端(Terminal),一条命令就能看你 Mac 的电源管理配置:

bash 复制代码
pmset -g

我的输出长这样:

perl 复制代码
System-wide power settings:
Currently in use:
 standby              1
 powernap             1
 networkoversleep     0
 hibernatemode        3
 tcpkeepalive         1
 womp                 1
 sleep                1 (sleep prevented by powerd, coreaudiod)

几个关键字段翻译一下:

  • powernap 1 --- Power Nap 开着。意思是合盖之后系统还会定期醒来同步邮件、更新 iCloud、刷新 Spotlight 索引。
  • tcpkeepalive 1 --- TCP 连接保活开着。合盖之后 WiFi 不断,Find My Mac 持续在线。
  • womp 1 --- Wake on LAN 开着。局域网里的设备可以把你的 Mac 唤醒。
  • hibernatemode 3 --- 混合休眠。内存一直通电,数据同时备份到硬盘。内存通电 = 持续耗电。

等等。这么多东西在后台跑,那合盖掉电不是理所当然吗?

但更夸张的是唤醒日志。跑一下这条:

bash 复制代码
pmset -g log | grep -i "darkwake\|Wake reason\|wake from"

DarkWake(暗唤醒)就是"系统偷偷醒了但不亮屏"。我截取了其中一段:

vbnet 复制代码
10:11:26 DarkWake from Deep Idle : due to NUB.SPMI0Sw3IRQ rtc/Maintenance
10:22:14 DarkWake from Deep Idle : due to smc.sysState.Wake wifibt
10:28:10 DarkWake from Deep Idle : due to NUB.SPMI0Sw3IRQ rtc/Maintenance

17 分钟内醒了 3 次。一次是 RTC 定时维护(Spotlight 索引之类),一次是 wifibt------WiFi 和蓝牙模块直接把系统拉起来了。

再看看唤醒总次数:

bash 复制代码
pmset -g log | grep "Total Sleep/Wakes"
yaml 复制代码
Total Sleep/Wakes since boot at 2026-04-15 12:21:17 : 69

从昨天中午开机到现在,不到 24 小时,系统被唤醒了 69 次。平均每 20 分钟醒一次。

你的 Mac 根本没在睡觉。

真凶找到了

拿到日志之后我去翻了 Apple 的开发者文档和 pmset 的 man page,整个链条是这样的:

第一个大户:Power Nap

苹果设计 Power Nap 的初衷是让你掀盖就能看到最新邮件。实现方式是合盖之后每隔一段时间唤醒系统,拉取邮件、同步 iCloud、更新 Spotlight、检查软件更新。每次唤醒都要开 WiFi、跑 CPU、读写磁盘。

在日志里对应的就是 rtc/Maintenance 类型的 DarkWake。

第二个大户:WiFi 保活

tcpkeepalive 1 意味着合盖之后系统维持 WiFi 连接。Find My Mac 需要这个------你丢了电脑还能定位。但代价是 WiFi 模块一直通电,而且 mDNSResponder(苹果的网络发现服务)会定期广播。

在日志里对应的是 wifibtmDNSResponder:maintenance 类型的唤醒。

看一下内核层面的断言:

bash 复制代码
pmset -g assertions
ini 复制代码
Kernel Assertions: 0x100=MAGICWAKE
  id=590 level=255 0x100=MAGICWAKE
  description=en0
  owner=IOSkywalkNetworkBSDClient

en0 就是 WiFi 网卡。它持有一个 MAGICWAKE 断言------字面意思,"魔法唤醒"。只要这个断言存在,WiFi 模块就有权随时把系统从深度睡眠中拉起来。

第三个大户:定时唤醒事件

bash 复制代码
pmset -g sched
csharp 复制代码
Repeating power events:
  wakepoweron at 2:55AM every day
Scheduled power events:
  [0]  wake at 04/16 11:59 by calaccessd.travelEngine
  [1]  wake at 04/16 12:30 by donotdisturb.server
  [2]  wake at 04/16 21:22 by com.apple.acmd.alarm

日历同步、勿扰模式定时器、系统维护任务......全在排队等着唤醒你的 Mac。

三步解决,从简单到彻底

第一步:关掉 Power Nap(30 秒,立竿见影)

打开「系统设置」→「电池」→ 点右下角的「选项...」→ 把「启用 Power Nap」关掉。

电池和电源适配器两个状态都关。

不想翻 GUI 的话,终端一条命令:

bash 复制代码
sudo pmset -a powernap 0

-a 表示 all(电池 + 插电都关)。这一步就能干掉大部分 rtc/Maintenance 类型的暗唤醒。

第二步:关掉 WiFi 保活和网络唤醒

bash 复制代码
# 关闭 TCP 保活(WiFi 不再在合盖后维持连接)
sudo pmset -b tcpkeepalive 0

# 关闭 Wake on LAN(局域网设备不能唤醒你的 Mac)
sudo pmset -a womp 0

-b 表示 battery only(只在电池模式下关闭)。插电的时候保持开着没问题,反正不心疼电。

注意:关掉 tcpkeepalive 之后,合盖状态下 Find My Mac 定位功能会失效。如果你特别依赖这个(比如经常在咖啡厅用电脑),可以只关 womp 不关 tcpkeepalive

第三步:电池模式切深度休眠(进阶,效果最好)

macOS 有三种休眠模式:

模式 内存供电 数据写入硬盘 唤醒速度 省电效果
0 最快 最差
3(默认) 快(< 1秒) 一般
25 慢(3-8秒) 最好

模式 3 是笔记本默认的:内存一直通电所以唤醒秒开,同时把数据备份到硬盘防止断电丢失。但"内存一直通电"就是合盖掉电的物理根因。

模式 25 切断内存供电,数据全写硬盘。合盖之后基本零功耗。代价是唤醒要等几秒。

bash 复制代码
# 电池模式用深度休眠
sudo pmset -b hibernatemode 25

# 插电模式保持默认
sudo pmset -c hibernatemode 3

如果你嫌每次唤醒等 3-8 秒太久,可以设一个缓冲时间------合盖前 1 小时保持浅休眠(方便随时掀盖),超过 1 小时自动切深度休眠:

bash 复制代码
# 高电量时(>50%),1 小时后转深度休眠
sudo pmset -b standbydelayhigh 3600

# 低电量时(<50%),15 分钟后就转
sudo pmset -b standbydelaylow 900

这个设置特别适合"下班塞包里明天早上再用"的场景。

改完怎么验证

改完之后别急着合盖等一晚。先快速验证配置是否生效:

bash 复制代码
pmset -g

确认输出里:

scss 复制代码
powernap             0
tcpkeepalive         0
womp                 0
hibernatemode        25  (如果是电池模式)

然后合盖等 10 分钟,打开,再看日志:

bash 复制代码
pmset -g log | grep "DarkWake" | tail -5

如果 10 分钟内没有 DarkWake 记录,说明配置生效了。

再来一个狠的:合盖过夜,第二天早上先记下电量,然后跑:

bash 复制代码
pmset -g log | grep "Total Sleep/Wakes"

对比一下改之前和改之后的唤醒次数。我改完之后从 69 次/天 降到了个位数。

进阶:合盖自动关 WiFi

如果你想更彻底------合上盖子的瞬间直接断 WiFi,连 tcpkeepalive 的问题都不存在了。

macOS 本身没有"合盖关 WiFi"的选项。但你可以用 sleepwatcher + 脚本实现:

bash 复制代码
# 安装 sleepwatcher(用 Homebrew)
brew install sleepwatcher

# 创建合盖时执行的脚本
echo '#!/bin/bash
networksetup -setairportpower Wi-Fi off' > ~/.sleep
chmod +x ~/.sleep

# 创建开盖时执行的脚本
echo '#!/bin/bash
networksetup -setairportpower Wi-Fi on' > ~/.wakeup
chmod +x ~/.wakeup

# 启动 sleepwatcher 服务
brew services start sleepwatcher

这样合盖就断网、开盖就连网,全自动。

如果不想装第三方工具,也可以手动养成习惯------合盖之前 Cmd + 空格 打开 Spotlight 搜"Wi-Fi",点一下关掉。虽然笨了点,但有效。

M 系列和 Intel 的区别

如果你用的是 M1/M2/M3/M4/M5 这些 Apple Silicon 芯片的 Mac,需要知道一件事:M 系列的睡眠机制跟 Intel 时代不一样。

Intel Mac 用的是经典的 S3 状态(Suspend to RAM),CPU 完全关闭,只有内存通电。功耗低,但唤醒需要重新初始化 CPU。

M 系列用的是 S0 Low Power 模式。芯片不完全关闭,而是进入超低功耗状态。好处是唤醒快到你感觉不到延迟。坏处是------因为芯片没有完全关闭,后台唤醒事件更容易把它拉起来。

所以 M 系列 Mac 对 Power Nap 和 WiFi 保活更敏感。同样的配置,Intel Mac 可能一晚掉 5%,M 系列可能掉 15%。不是因为 M 系列更耗电,而是它"太容易被叫醒了"。

关掉 Power Nap 和 WiFi 保活之后,M 系列的超低功耗优势才能真正发挥出来。我改完配置之后合盖过夜,电量从"掉 20-30%"变成了"掉 1-2%"。

还是掉电?排查清单

如果上面的步骤都做了还掉电,按这个清单逐条排查:

1. 检查是不是有进程在阻止睡眠

bash 复制代码
pmset -g assertions

PreventUserIdleSystemSleep 那一行。如果是 1,说明有进程在阻止系统休眠。下面会列出是哪个进程。常见的捣蛋鬼:Spotlight 索引(mds_stores)、Time Machine 备份、某些音频软件。

2. 检查外接设备

拔掉所有 USB-C 设备(扩展坞、显示器、硬盘)再合盖试试。某些廉价的 USB-C 集线器会持续发送唤醒信号。

3. 检查蓝牙设备

蓝牙鼠标和键盘也可能唤醒 Mac。在「系统设置」→「蓝牙」→「高级」里关掉「允许蓝牙设备唤醒这台电脑」。

4. 重置 SMC / NVRAM

如果以上都没用,试试重置 SMC(Intel Mac)或者重启按住 Option + Cmd + P + R 重置 NVRAM。M 系列 Mac 关机等 30 秒再开机就行。

5. 检查电池健康度

bash 复制代码
system_profiler SPPowerDataType | grep -A 3 "Health"

如果 Maximum Capacity 低于 80% 且 Cycle Count 超过 500,可能是电池本身老化了,该去 Apple Store 看看。

我的最终配置

折腾完之后,我现在的电池模式配置是这样的:

bash 复制代码
sudo pmset -b \
  powernap 0 \
  tcpkeepalive 0 \
  hibernatemode 25 \
  standbydelayhigh 3600 \
  standbydelaylow 900 \
  womp 0

插电模式保持默认不动,该快就快。

合盖过夜实测:从 80% 到第二天早上 79%。掉了 1%。


说句题外话。苹果把 Power Nap 默认打开、把 TCP 保活默认打开,本意是让用户体验更"无缝"------掀盖就是最新邮件、丢了电脑还能定位。但代价是合盖之后系统根本停不下来。

这种"我替你做决定"的设计哲学在 iPhone 上问题不大(反正每天充电),但在笔记本上就会让人抓狂。周五扔包里周一没电这种事,换谁都火大。

好在改起来不复杂。上面那几条命令,5 分钟搞定,从此告别假睡眠。

如果你的 Mac 也有合盖掉电的问题,试完记得回来说一下效果。

相关推荐
树獭叔叔4 小时前
OpenCLI:让任何网站成为你的命令行工具
后端·aigc·openai
机器之心5 小时前
从「片段生成」到「长视频漫游」:OmniRoam探索轨迹可控的长视频生成新范式
人工智能·openai
怕浪猫8 小时前
第14章 高级 Agent:LangGraph 与状态机
langchain·openai·ai编程
机器之心1 天前
OpenAI也搞「Mythos」?网络安全版GPT-5.4-Cyber亮相
人工智能·openai
量子位1 天前
新Vidu Q3参考生,这是冲着「剧」来的!万物皆可参考:特效音效场景都备好了
openai
慧知AI1 天前
Chrome Skills重磅上线!浏览器秒变"龙虾助理",开发者必看
openai
量子位1 天前
刚刚,李飞飞世界模型新成果发布
openai
無名路人1 天前
用 codex AI 更新了下之前写的浏览器云书签标签页扩展
前端·openai·ai编程
加瓦点灯1 天前
从 Prompt 到 Harness:AI 工程的三重进化,你在哪一层?
openai