文章

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

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

License:  CC BY 4.0