MacOS睡眠管理——让你的Mac睡的更香

让你的Mac睡的更香

最近Mac的睡眠让我感到不太舒服,明明已经合上盖子拔掉电源,可是它还在熬着夜!不好好睡觉真让人生气!

所以得好好调教一下,让他该睡觉的时候老老实实趴下,该干活的时候就得全力以赴工作。

Mac是怎么睡觉的

Mac有两种睡觉有两个阶段,一开始是睡眠,在一定条件之后会从睡眠进入休眠。这两种睡觉方式就像我们人的小憩和睡大觉。小憩醒得快,睡大觉醒的就会慢一些。

在长时间无操作,或者把Macbook的盖子合上时以及手动点击进入睡眠时则进入睡眠状态,在睡眠状态下数据存储在内存中,此时的系统可以被快速唤醒,快速恢复到睡眠前的状态。

如果睡眠持续了一段时间之后,Mac会根据设定进入更深一层的休眠状态,此时Mac要根据你的配置来决定要不要把内存中的数据写入到磁盘中,然后会放弃对内存及设备的大部分供电,达到更加节省电量的目的。如果在休眠模式下唤醒,则Mac会将保存在硬盘中的数据再重新写入到内存之中并恢复程序运行,这样的话耗时比较长,速度比较慢。

pmset工具

Apple 提供了一个工具叫pmset来管理Apple 设备的电源选项。pmset这个工具的名字来源于 Power Manager Setting(pmset) ,通过调整macos的睡眠计划,可以让Mac睡的更香。

pmset用法

sudo pmset [-选项] <参数>

实例:

  • pmset -g cap: 查看当前供电方式下可以调节的参数
  • pmset -g custom : 查看全部供电方式下的电源参数信息
  • pmset restoredefaults : 还原自定义的设置

pmset常用选项

  • pmset -a : 全局调整睡眠电源计划
  • pmset -c : 仅调整外部供电时睡眠计划
  • pmset -b : 仅调整电池供电时睡眠计划
  • pmset -g : 查看当前供电方式下的睡眠计划

常用参数

  • sleep: 睡眠计时器,进入睡眠所需要的时间
  • hibernatemode: 睡眠模式
    • hibernatemode = 0 将数据保存在内存中持续为内存供电 非笔记本机器默认配置
    • hibernatemode = 3 safe sleep模式,数据保存在内存中并写入内存镜像到硬盘中备份。笔记本默认模式
    • hibernatemode = 25 将内存镜像直接写入到硬盘中
  • standby: 休眠计时器
  • highstandbythreshold: highstandbythreshold(电池剩余电量百分比)它是standbydelay模式选择阈值,默认 50% 电量。
    • 高于阈值,采用standbydelayhigh计算时间。
    • 低于阈值,采用standbydelaylow计算时间。
  • gpuswitch: 这个参数用来管理独立显卡的选择
    • gpuswitch=0 只使用集成显卡
    • gpuswitch=1 只使用独立显卡
    • gpuswitch=2 自动切换显卡

其他参数

  • lidwake:开盖时是否唤醒
  • tcpkeepalive:合盖时是否保存网络连接
  • displaysleep:屏幕休眠时间
  • disksleep:硬盘休眠时间
  • acwake:被同一 iCloud ID 下的设备唤醒

我的个人参数

外部供电环境下:

外部供电睡眠设置使用的是默认参数。

外部电源供电-2020-07-15

电池供电:

电池供电-2020-07-15

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
// 20分钟后睡眠
sudo pmset -b sleep 20

// 休眠模式使用3,在给内存供电的同时写入内存的镜像备份到磁盘中
sudo pmset -b hibernatemode 3

// 显示器15分钟后关闭
sudo pmset -b displaysleep 15

// 硬盘30分钟后休眠
sudo pmset -b disksleep 30

// 休眠后断网
sudo pmset -b tcpkeepalive 0

// 开盖唤醒
sudo pmset -b lidwake 1

// 关闭被同一 iCloud 下的设备唤醒
sudo pmset -b acwake 0

// gpuswitch 0 在使用电池的情况下只使用核心显卡
sudo pmset -b gpuswitch 0

// 在电池剩余电量高于75%的情况时,休眠计时器设定为2小时。低于75%的情况下1小时后进入休眠。
sudo pmset -b highstandbythreshold 75
sudo pmset -b standbydelayhigh 7200
sudo pmset -b standbydelaylow 3600

参考文章:

https://sspai.com/post/61379