MacBook一晚休眠都掉电40%多,怎么解决?

背景

使用MacBook多年,在电脑合盖休眠不使用时,出现各种掉电快的场景,如:

一晚后剩余电量只有50%多

过节多日不开电脑直接没电,想突然拿起使用,结果打不开还得找充电器

之前也尝试过网上的方法重置Mac的SMC或者重启电脑,都能一时解决问题,后面就拖到现在。在出现一晚掉电50%多后,下决心还是彻底解决它。

通过下面的操作后,终于经过这几天的观察,一晚上掉电只有百分之5以内了。

取决于当时电脑合盖时打开应用程序的多少。

我尝试过MacBook打开5个Keynote、4个IDEA项目、1个VSCode项目、浏览器10几个标签页、微信、企业微信、Zoom等等非常多的软件,同时运行一个java应用在后台,在锁屏合盖后,一晚只掉电5%。

问题排查切记:要移除插电设备,如:电源充电器,显示器连接线等等,不然会查看到插电源状态下的设置。

查看个人MacBook的电池设置:

$ pmset -g

System-wide power settings:

Currently in use:

lidwake 1

lowpowermode 1

standbydelayhigh 86400

standbydelaylow 10800

standby 1

proximitywake 0

ttyskeepawake 1

hibernatemode 3

powernap 0

gpuswitch 2

hibernatefile /var/vm/sleepimage

highstandbythreshold 50

displaysleep 2

womp 0

networkoversleep 0

sleep 1 (sleep prevented by bluetoothd, sharingd)

acwake 0

halfdim 1

tcpkeepalive 1

disksleep 10这里可以发现问题,蓝牙和分享阻止sleep 休眠。

排查问题:

$ pmset -g assertions

Assertion status system-wide:

BackgroundTask 0

ApplePushServiceTask 0

UserIsActive 1

PreventUserIdleDisplaySleep 0

PreventSystemSleep 0

ExternalMedia 0

PreventUserIdleSystemSleep 1

NetworkClientActive 0

Listed by owning process:

pid 185(bluetoothd): [0x00018daa00018f8d] 00:00:22 PreventUserIdleSystemSleep named: "com.apple.BTStack"

pid 191(WindowServer): [0x00017a38000985ba] 00:00:00 UserIsActive named: "com.apple.iohideventsystem.queue.tickle serviceID:10003116d service:AppleUserHIDEventService product:Convertible 2 TKL eventType:3"

Timeout will fire in 120 secs Action=TimeoutActionRelease

pid 599(sharingd): [0x00018d8000018f87] 00:01:04 PreventUserIdleSystemSleep named: "Handoff"

No kernel assertions.

Idle sleep preventers: IODisplayWrangler可以看到这里开启了配置 AirDrop & Handoff 以及连接了各种蓝牙设备导致的。

优化方案一 调整电池配置网上有大量 pmset 的配置,我觉得比较的激进,而且会影响日常使用,例如:hibernatemode 设置成 25,休眠后开启很慢。

以下是我的调整,只需要一项,在休眠时不需要被网络唤醒,各种生活或者工作的提醒等有手机等移动端就可以了。

# 关闭网络唤醒

sudo pmset -b tcpkeepalive 0二 关闭 Handoff 接力

三 休眠时关闭蓝牙,唤醒后再开启官方地址:https://github.com/odlp/bluesnooze

brew install bluesnooze 安装后,设置成开启启动即可。

到这里就全部配置完成了。