MacBook Pro Retina 睡眠耗电现象深究
- 2016-10-05更新: 加入macOS Sierra 的情况。
- 2016-11-05更新: 加入关闭 Wi-Fi 的工具下载(Workflow for Alfred2)。
经实测,我的机器(rMPB2015, EI Capitan)睡眠一晚耗电超过10% 。这显然是不正常的,许多网友都有此问题 。
我的配置如下图所示:
[TOC]
影响睡眠耗电的因素
一番折腾,我发现有多种因素会影响睡眠中的耗电:
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) :
- 将 Mac 关机。
- 将 MagSafe 或 USB-C 电源适配器连接到电源和 Mac。
- 在内建键盘上,按下键盘左侧的 Shift-Control-Option 键,然后同时按下电源按钮。
- 松开所有按键,然后再次按下电源按钮以开启 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 ,用起来是这个样子的:
这个 Workflow 直接调用 macOS 的命令行来关闭/打开 Wi-Fi。具体介绍可以看这里:OS X 中使用命令行来管理网络 。
下载这个 Workflow :
源码下载: UCC.alfredworkflow 。
要对源码进行开发,请自行安装其依赖 alfred-workflow 。
这个解决方案很早就写成了,今天看到评论中 wujunchuan 网友的文章,才想到应该把这个方案共享出来。wujunchuan 也提出了 更自动化的方案 。
2016-10-05更新:
升级 macOS Sierra 之后,情况似乎有所好转。目前观察到的情况是,Sierra 在休眠之后会自动禁用 Wi-Fi 连接。唤醒时,可以短时间内看到 Wi-Fi 连接是断开的,然后就自动启用了。然而这并没有什么卵用,每晚耗电还是在 3% 左右。
参考
- rMBP 2015 Wake Reason: ARPT (Network)
- Yosemite Battery Issues.
- 如果 Mac 未按预期睡眠或唤醒
- Determine Why Your Mac Wakes Up From Sleep
- 增强的通知功能可以将 Mac 唤醒
- 关于“请求时唤醒”和 Bonjour Sleep Proxy
- OS X:通过睡眠节省能源
(全文完)
- 文章ID:2545
- 原文作者:zrong
- 原文链接:https://blog.zengrong.net/post/osx-saving-energy/
- 版权声明:本作品采用 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 进行许可,非商业转载请注明出处(原文作者,原文链接),商业转载请联系作者获得授权。