原文链接

因为之前用的是网上流传的土法来禁止生成 sleepimage,尝到了苦头,而且2次!

大家知道 OSX 有几种睡眠模式,其中 hibernatemode 可以是 0 (传统睡眠方式,不生成 sleepimage
文件),3 和 25 (Apple 称之安全睡眠方式,会生成 sleepimage 文件),大家也都知道可以用 sudo pmset
-a hibernatemode 0 来禁止那个内存镜像文件。

以前这个命令一直可用,直到 OS X Mountain Lion
v10.8.2,大家突然发现这个命令不起作用了,重启电脑或者睡眠一段时间后,那个 sleepimage 又回来了。换句话说,某些型号的
mac,似乎强制使用安全睡眠方式。

然后网上就有各种土法,粗暴之极,诸如建立一个只读的空文件,或者用 sudo ln -s /dev/null
/var/vm/sleepimage
把内存镜像引入系统黑洞。这些土法,一般用用大概没什么问题,就算有问题,你大概也不会太在意,譬如程序崩溃,大不了重新启动好了。

我之前就是用 /dev/null 这个方法,然后我2次系统升级都出问题,2个月前 10.9.2 升级到 10.9.3 时,以及昨天
10.9.3 升级到 10.9.4
时,升级安装界面2次都停留在同一个地方,说还有几分钟就好了,然后,然后,就没有然后了,等了一个多小时,状态条动都不动。不得已强行关机。

因为我没弄其他任何所谓的系统调试东西,唯一运行过的 sudo 命令就是这个,所以怀疑是这个土法导致升级出错。

然后就觉得要花点时间弄明白 OSX 的睡眠方式,如果真不能禁止 sleepimage,死也要死得明白。

以下是我的理解,绝对不同于各大中文 Mac 网站抄来抄去的那些东西。欢迎探讨。

OSX 的睡眠参数,可以打 pmset -g 了解一下你的电脑处在什么睡眠模式下:

比较有兴趣的参数:

standbydelay 10800  

standby 0  

autopoweroffdelay
14400  

autopoweroff 0  

hibernatemode 0

这几个参数组成了 OSX 的睡眠模式。

当睡眠开始时,合上盖子,或者按电源键,如果你的 hibernatemode 是 0,OSX 是不立即往硬盘上写内存镜像的。

autopoweroff 这是欧盟的节能要求,满足以下条件时:

  • 接电源
  • 没有外接设备
  • 没有网络活动
  • 电脑是 MacBook Pro (Mid 2012 and
    later), MacBook Pro (Retina, Mid 2012 and later), MacBook Air (Mid
    2012 and later), iMac (Late 2012 and later), Mac mini (Late 2012
    and later)

到了 autopoweroffdelay x 秒后,就开始启动安全睡眠模式,往硬盘上写
sleepimage,然后进入深度睡眠。

standby 满足以下条件时:

  • 用电池
  • 没有外接设备
  • 没有网络活动
  • 没有外接显示器
  • 电脑是 MacBook Pro (Retina,
    13-inch, Late 2012) and later, MacBook Pro (Retina, 15-inch, Early
    2013) and later, MacBook Pro (Retina, Mid 2012), MacBook Air (Mid
    2010) and later, SSD and Fusion drive versions of Mac mini (Late
    2012) and later, SSD and Fusion drive versions of iMac (Late 2012)
    and later

到了 standbydelay x 秒后,就开始启动安全睡眠模式,往硬盘上写 sleepimage,然后进入深度睡眠。

可见,Apple
的安全睡眠其实是个统称,具体是由2个参数激发的,这2个参数都可以在普通睡眠一段时间后让电脑进入深度睡眠状态,但是作用的条件不相同,基本上一个是接电源时用,一个是用电池时用。

这也说明了为什么有人抱怨为什么在设置了 hibernatemode 0 后,睡眠了一段时间后,那个 sleepimage
文件又出现了,而有人说没有。这取决于他们各自睡眠的时间以及延迟时间的设定,合上又马上打开,那个文件是不会立即生成的。

所以,要完全的,合法的禁止 sleepimage 文件,不但要设置 hibernatemode
0,还要禁止电源和电池情况下的节能设置。

也就是说,你要跑下面的命令才行:

sudo pmset -a hibernatemode
0  

sudo pmset -a autopoweroff
0  

sudo pmset -a standby
0  

sudo rm /var/vm/sleepimage

然后不管你怎么重启,睡眠n久,都不会再生成内存镜像文件了,当然你的电脑就无法再进入深度睡眠模式,Apple
官方说电池待机能力可能会稍稍降低,但我看也未必,普通睡眠状态下电压已经非常小了。

如果不在乎硬盘空间的,或许不用管它,用 0 即可,也就是普通睡眠了几个小时后才往硬盘写内存镜像文件,再进入深度睡眠。

如果你也不在乎经常读写硬盘的,或者懒得折腾任何东西的,也可以用缺省模式,对笔记本来说是
3,也就是睡眠后马上就写内存镜像文件,再在几个小时后进入深度睡眠。

怎么知道电脑进入了深度睡眠?就是唤醒时看到灰屏,和载入进度条。

OSX 的深度睡眠看起来还是不错的,有机会可以跟人卖弄一下,它的深度睡眠,可以待机 1
个月。当然如果真的有人这么做,那这人肯定是缺心眼的了。

【转】教你弄清 OSX 的睡眠模式,以及合法的禁止产生 sleepimage的更多相关文章

  1. MAC的睡眠模式介绍

    因为之前用的是网上流传的土法来禁止生成 sleepimage,尝到了苦头,而且2次! 大家知道 OSX 有几种睡眠模式,其中 hibernatemode 可以是 0 (传统睡眠方式,不生成 sleep ...

  2. CentOS 7合盖后黑屏但不进入睡眠模式修改

    CentOS 7合盖后黑屏但不进入睡眠模式修改 systemd 能够处理某些电源相关的 ACPI事件,你可以通过从 /etc/systemd/logind.conf 以下选项进行配置: HandleP ...

  3. ESP8266的低功耗方案-睡眠模式

    在某些时候我们设计的产品可能不具备持久供电的环境,那通常会采用锂电池.干电池一类的轻便型的非持久性电源.当遇到这种情况时,产品的续航能力可能就会成用户评估产品的一个重要指标,加大电池容量当然是最为直接 ...

  4. 第21章 RTX 低功耗之睡眠模式

    低功耗是 MCU 的一项非常重要的指标,比如某些可穿戴的设备,其携带的电量有限,如果整个电路消耗的电量特别大的话,就会经常出现电量不足的情况,影响用户体验. 本章节为大家讲解 M3/4的低功耗方式之睡 ...

  5. FreeRTOS 低功耗之睡眠模式

    以下转载自安富莱电子: http://forum.armfly.com/forum.php 低功耗是 MCU 的一项重要的指标,比如某些可穿戴的设备,其携带的电量有限,如果整个电路消耗的电量特别大的话 ...

  6. 详解Mac睡眠模式设置

    详解Mac睡眠模式设置 原文链接:http://www.insanelymac.com/forum/index.php?showtopic=281945 需要说明的是,首先这篇文章是针对已经能够成功睡 ...

  7. sitecore系列教程之Sitecore个性化-配置文件,模式和角色

    这是利用Sitecore规则引擎实现数字化转换的三部分系列的第二部分.阅读上一篇文章,通过为您的个性化体验定义内容策略来设置基础.   Sitecore有一个非常强大的规则引擎,可以帮助推动个性化的用 ...

  8. Hive教程之metastore的三种模式

    Hive中metastore(元数据存储)的三种方式: 内嵌Derby方式 Local方式 Remote方式 [一].内嵌Derby方式 这个是Hive默认的启动模式,一般用于单元测试,这种存储方式有 ...

  9. 【转】Android驱动开发之earlysuspend睡眠模式编程总结

    原文网址:http://blog.csdn.net/bigapple88/article/details/8669537 (1)添加头文件: #include <linux/earlysuspe ...

随机推荐

  1. KMP-字符串模式匹配(c++/python实现)

    KMP算法可以在O(n+m)的时间数量级上完成模式匹配,其做法在于:没当一次匹配过程中出现字符比较不等时,不需要回溯指针,而是利用已经得到的“部分匹配”的结果将模式向右“滑动”尽可能远的一段距离后,继 ...

  2. 从一个例子学习 instanceof 和 getclass 的区别

    判断两个对象是否为同一类型,时常用到getclass 和 instanceof ,而这两个函数又是时常让人混淆.下面从一个例子说明两者的区别: public class Test_drive { pu ...

  3. 【Java并发编程】:多线程环境中安全使用集合API

    在集合API中,最初设计的Vector和Hashtable是多线程安全的.例如:对于Vector来说,用来添加和删除元素的方法是同步的.如果只有一个线程与Vector的实例交互,那么,要求获取和释放对 ...

  4. java学习-MD5消息摘要算法

    md5 属于hash算法一类,是不可逆的消息摘要算法.与对称加密和非对称加密算法不一样,不需要加密密钥. 注意: md5不是加密算法,只是将数据进行散列计算后生成一个唯一值的算法,没有加密密钥也没有解 ...

  5. java ee 中 Jsp 页面的定时的跳转(数字倒数)

    java ee 中 Jsp 页面的定时的跳转,实现数字倒计时跳转固定页面 1,Servlet类  RefreshServlet类实现 package org.servlet; import java. ...

  6. MVC初级知识之——Routing路由

    实例产品基于asp.net mvc 5.0框架,源码下载地址:http://www.jinhusns.com/Products/Download 我们注意到地址栏的URL是Home/Index 路由可 ...

  7. Java中使用json时java.lang.NoClassDefFoundError: net/sf/ezmorph/Morpher问题解决

    下面代码: public static void main(String[] args) { JSONObject obj = new JSONObject(); obj.put("msg& ...

  8. Hibernate中一级缓存概念以及flush与clear的区别

    Hibernate采用缓存机制提高数据查询效率.缓存分为一级缓存和二级缓存,一级缓存在Session中存在,二级缓存需要手动配置. 在一级缓存中,如果数据保存到数据库中后,而session又没有关闭的 ...

  9. JVM进程状态监控

    前言 ========== 为什么需要做服务器jvm自动发现的监控呢?这个事情主要有两点原因: 1.zabbix默认监控jvm状态是使用jmx中转进行监控的,监控效率比较低下 2.zabbix使用jm ...

  10. SSM配置JDBC错误: cquisition Attempt Failed!!!

    异常: 警告: com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask@20ffa401 -- Acquisition Attempt Fa ...