MacBook Pro Retina 睡眠耗电现象深究

Sleep Mac

经实测,我的机器(rMPB2015, EI Capitan)睡眠一晚耗电超过10% 。这显然是不正常的,许多网友都有此问题

我的配置如下图所示:

My rMPB

跳过废话直接看解决方案

[TOC]

影响睡眠耗电的因素

一番折腾,我发现有多种因素会影响睡眠中的耗电:

app 阻止和唤醒

可以在下面的截图中看到每个app是否被允许唤醒。

app唤醒

蓝牙唤醒

在下面的设置界面中可以关闭蓝牙唤醒。

蓝牙唤醒

网络唤醒

网络唤醒可以在 节能器设置 中取消。取消之后,可以看到“查找我的Mac”功能出现问题。

网络唤醒

节能器设置

在节能器设置中,可以设置电池和电源适配器的选项。需要注意的一点是:“唤醒以供WIFI网络访问”一项虽然是在电源适配器中设定,但依然对电池设定起作用。

节能器设置

将“唤醒以供WIFI网络访问”一项禁用,可以避免电脑被其他网络任务唤醒。在 OS X:通过睡眠节省能源 中有详细介绍。

pmset

使用pmset 这个命令可以对省电功能做深入详细的设置。可使用 man pmset 查看完整用法或者点击 链接

使用 pmset -p custom 查看当前的节能设置。例如我的机器上是这样的:

 1%  ~ pmset -g custom
 2Battery Power:
 3 lidwake              1
 4 autopoweroff         1
 5 autopoweroffdelay    14400
 6 standbydelay         10800
 7 standby              1
 8 ttyskeepawake        0
 9 hibernatemode        3
10 powernap             0
11 gpuswitch            2
12 hibernatefile        /var/vm/sleepimage
13 displaysleep         3
14 sleep                3
15 acwake               0
16 halfdim              1
17 lessbright           1
18 disksleep            10
19AC Power:
20 lidwake              1
21 autopoweroff         1
22 autopoweroffdelay    14400
23 standbydelay         10800
24 standby              1
25 ttyskeepawake        0
26 hibernatemode        3
27 powernap             0
28 gpuswitch            2
29 hibernatefile        /var/vm/sleepimage
30 womp                 1
31 displaysleep         10
32 networkoversleep     0
33 sleep                0
34 acwake               0
35 halfdim              1
36 disksleep            0

Battery Power(电池)和 AC Power(电源)的信息是分开的。

网上很多文章提到设定 hibernatemode/autopoweroff/standby 来减少硬盘写入等等,我认为没有必要,OS X 的默认设置已经相当好了。

重置 SMC

在取消蓝牙和网络唤醒之后若还耗电,应该先试试 重置 Mac 上的系统管理控制器 (SMC)

  1. 将 Mac 关机。
  2. 将 MagSafe 或 USB-C 电源适配器连接到电源和 Mac。
  3. 在内建键盘上,按下键盘左侧的 Shift-Control-Option 键,然后同时按下电源按钮。
  4. 松开所有按键,然后再次按下电源按钮以开启 Mac。

要确定上面的组合快捷键是否生效,可以观察在按下快捷键的时候,MagSafe 指示灯的变化。在我的机器上,指示灯会从橙色(充电状态)跳转到绿色,然后又跳回橙色。

查看唤醒原因

我重置SMC后依然没有什么卵用,于是采用下面的命令查询原因:

1% ~ syslog |grep "Wake Reason"
2
3Apr 25 22:00:32 zrong-mbp kernel[0] <Notice>: ARPT: 185462.901438: ARPT: Wake Reason: Wake on TCP Timeout
4Apr 25 22:12:36 zrong-mbp kernel[0] <Notice>: ARPT: 185496.250029: ARPT: Wake Reason: Wake on TCP Timeout

从log中可以看到,我的机器每10分钟被TCP超时唤醒一次。唤醒的原因是ARPT。 Yosemite Battery Issues. 说明了除ARPT外的其他唤醒原因。

但是,我没有找到资料说明ARPT是什么含义。

我也没找到TCP超时的原因。这篇14页的讨论也没能给出一个具体的解决方案: rMBP 2015 Wake Reason: ARPT (Network) ,问题似乎是集中在 EI Capitan 版本中。

终极方案

最有效的但是很low的解决方案是:在睡眠之前手动关闭WIFI连接

最终方案就是最简单的方案。真是愚蠢的人类啊…… 还深究个毛线!

2016-11-05更新:

为了方便使(tou)用(lan),我写了一个 Alfred Workflow ,用起来是这个样子的:

UCC.alfredworkflow

这个 Workflow 直接调用 macOS 的命令行来关闭/打开 Wi-Fi。具体介绍可以看这里:OS X 中使用命令行来管理网络

下载这个 Workflow :

1 文件

源码下载: UCC.alfredworkflow

要对源码进行开发,请自行安装其依赖 alfred-workflow

这个解决方案很早就写成了,今天看到评论中 wujunchuan 网友的文章,才想到应该把这个方案共享出来。wujunchuan 也提出了 更自动化的方案

2016-10-05更新:

升级 macOS Sierra 之后,情况似乎有所好转。目前观察到的情况是,Sierra 在休眠之后会自动禁用 Wi-Fi 连接。唤醒时,可以短时间内看到 Wi-Fi 连接是断开的,然后就自动启用了。然而这并没有什么卵用,每晚耗电还是在 3% 左右。

参考

(全文完)