文章

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

见字如面,与大家分享实践中的经验与思考。

背景

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

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

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

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

image-20240413104148187

通过下面的操作后,终于经过这几天的观察,一晚上掉电只有百分之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 接力

image-20240409113931689

三 休眠时关闭蓝牙,唤醒后再开启

官方地址:https://github.com/odlp/bluesnooze

brew install bluesnooze 

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

image-20240413111819056

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


欢迎关注我的公众号“Eric技术圈”,原创技术文章第一时间推送。

License:  CC BY 4.0