概述
最近使用两台Mac互操作时,发现系统无法深度睡眠,直观的是“设备合盖睡眠时能被ping
通”,且存在合盖不插电耗电情况(大概一晚上耗电5%),有违背对苹果设备优秀的电量优化执念观念认知,因此,仔细研究了下设备睡眠被唤醒耗电的原因。
原因分析
对于如何设置及进入睡眠状态,请参见苹果官方使用手册文档,这里有详细的说明,在此不赘述。
直接上分析结论,按照官方说法及使用总结,大致存在如下因素:
注;如下说明针对便携式Mac电能,对于像iMac或者Mac mini可能存在更多的设置,请参见官方文档
1. 主观错误
如只是关闭显示器(手动降低显示器亮度为0,或者设置xx分钟后自动关闭显示器),并且关闭键盘灯(手动或者外部光线高导致自动关闭),或者系统被关机(电池没电或者人为关闭忘记了)都会给人以假象“系统睡眠”;并且设备合盖后会存在短暂的系统清理监听状态(待确认),也不会完全进入深度睡眠状态;
2. 系统设置问题
包含节能器设置、外接设备设置、共享设置、应用设置等;
节能器设置
节能器设置可能是大家熟知的睡眠相关的设置(惭愧的是楼主用了好久的Mac也是,啪啪啪打脸|||),如下图所示
“电池模式”下,如果设置了“启用电能小憩”,如上面说明:系统会定期检查电子邮件、日历和其它
iCloud
更新相的内容;
“电源适配器”模式下,如果开启了“当显示器关闭时,防止电脑自动进入睡眠”,则系统不会自动进入睡眠,启用“电能小憩”同“电池”模式也会被系统自动定时唤醒;特别说明下“唤醒以供wifi网络访问”,这个也会导致系统无法进入深度睡眠;
具体的“节能器设置”可参见官方文档使用 Mac 上的“节能”设置
共享设置
Mac 电脑处于睡眠状态时可以继续提供共享服务,如 iTunes 和 iPhoto 图库共享、打印机共享、文件共享和屏幕共享。
对于开发会用到的像文件共享及屏幕共享都会导致无法深度睡眠,不过前提条件是:对于启用了“请求时唤醒”功能的便携式 Mac,仅在接通电源适配器且打开内建显示器或连接外置显示器时才能使用“请求时唤醒”功能;
蓝牙设置
对于开启蓝牙设置”允许蓝牙设置唤醒电能“选项的,蓝牙设备(如蓝牙键盘、鼠标或者触摸板)都会唤醒系统;
通知设置
FaceTime 通话、“信息”以及其他应用和服务中的通知都会唤醒电脑,如信息、FaceTime
通话、社交网络(如微信、QQ,不过这个不能合盖,估计是无法听到声音吧)、Game Center
、查找我的Mac;
3. 应用设置
查看“活动监视器->能耗->防止睡眠”列表下是否存在应用禁用了系统睡眠情况,如下图所示:
若存在此情况请进入应用设置关闭此选项或者功能;
4. 其他
如进入”恢复模式“,电脑会自动禁用自动睡眠;或者其他系统问题,如SMC、NVRAM等;
睡眠机制
苹果提供了电源配置工具pmset
,可通过mac pmset
详细查看说明,使用pmset -g
查看当前使用的配置;
➜ ~ pmset -g
System-wide power settings:
Currently in use:
standbydelaylow 10800
standby 1
womp 1
halfdim 1
hibernatefile /var/vm/sleepimage
proximitywake 1
powernap 0
gpuswitch 2
networkoversleep 0
disksleep 10
standbydelayhigh 86400
sleep 3 (sleep prevented by UserEventAgent)
hibernatemode 3
ttyskeepawake 1
displaysleep 3
tcpkeepalive 1
highstandbythreshold 50
acwake 0
lidwake 1
具体说明下hibernatemode
参数,详细如下:
Mac的sleep mode在os x系统里有一个准确的叫法是HibernateMode,它有三个值:0、1、3
Mode: 0
当 HibernateMode 的值为 0 时 ,设备里除了 RAM(内存)外,键盘,显示器,鼠标等所有内外工作模块都会断开电源(或电池供应),此时系统不会将内存的数据写入硬盘,如果到设备被再次唤醒之前,电源线一直接入或者电池电量足够,那么用户在开盖后可立刻唤醒 Mac。
这种模式的优点明显,就是她不会向硬盘写数据,也就是设备在深度睡眠(一般成为休眠)时不会产生内存镜像,即能减少硬盘的占用率,也能让唤醒操作立刻完成。但请注意,许多事情有优点也有缺点,那就是当设备处于睡眠过程中时,电源线没插上,电池电量耗尽,那内存的供电就会自动中断,内存里保存的数据也会自动清除。OS X系统自身默认没有选择它。
Mode: 1
当 HibernateMode 的值为 1 时,设备里所有模块均断电,内存数据被全部写入硬盘,硬盘里有一个专门负责“休眠”的内存镜像文件,当设备从“休眠”中恢复时,会自动调用保存好的内存镜像文件,将数据重新写回内存中,受硬盘的输入输出速率影响,这个过程会很漫长,所以许多朋友会在唤醒时看到屏幕里有进度条,千万别认为你的设备硬件不够用了,该换电脑了,别听奸商的忽悠,Mac 的产品寿命可比手机长多了,回到正题,在数据被完全写回内存后,Mac 才能被完全唤醒。这种模式优点明显,无需单独为内存供电,内存的数据不容易被丢失,缺点就是唤醒时间较长。
Mode: 3
第三项值就是 OS X 默认选择的,这种状态下也叫:“Safe Sleep”,人们还叫她是“混合休眠模式”,这种模式结合了前两种模式的长处,设备进入睡眠后,内存仍然保持供电,但仍然会将数据写入硬盘,这样内存的数据就同时被保存在两个硬件模块里,如果在唤醒时,设备电量充足(或够用),那 Mac 就会像 Mode 0 一样快速被唤醒,如果唤醒操作前,设备电量已不足了或者已经被耗尽,此时插上电源线后,系统会自动从硬盘里的内存镜像文件中恢复内存,而唤醒过程和 Mode 1 一样慢。这种模式优缺点就不用再用我说了吧,非常灵活。
苹果默认的是safe sleep
安全睡眠模式,在此模式下内存会保持供电,且数据会写入到磁盘,不会导致数据丢失且能被快速唤醒,这也证明了合盖后系统短暂的不会被深度睡眠的缘故;
解决耗电问题
对于苹果的电源策略已经从用户使用角度发挥的相当好,因此不需要去手动配置,且对于Mac小白用户(貌似都是,手动笑)设置繁琐学习成本高,重点是苹果设备合盖睡眠后耗电不严重,小白用户也无需太多关注,除非对于我这种耗电细节偏执狂魔。
但如果真的遇到耗电严重的情况,一般是应用设置了”防止睡眠“导致系统无法深度睡眠,需要去”活动监视器“去查看并关闭应用设置;或者是共享设置存在网络连接其他设备操作的情况,不过这种情况用户都会知道;
但但上述情况无法有效解决,那不排除系统bug或者硬件问题,这个就需要专业人士去排查定位,不排除返场维修的情况。
Reference
MacBook Pro Retina 睡眠耗电现象深究
如果 Mac 不能按预期睡眠或唤醒