MacBook Airがスリープから醒めない件

MacBook Air (11" Mid 2011, メモリ 4GB)がフタを閉じてスリープ状態に入り1時間ぐらいするとフタを開けても起き上がらず、しかたないので電源ボタン長押で強制再起動の刑で困ってたんですが、結果からいうと、

sudo pmset -a hibernatemode 0

で解消しましたというお話。


起き上がらない事象は再現率100%。Console.appでログを見てみると、フタを閉じて70分後に毎回同じログ(Wake reason: EC.SleepTimerとか)が記録されていたので、これでググったところ、

で機種は違えど同じような症状を発見。

どうも、フタを閉じてしばらくは浅いスリープ(メモリ上に待避)なんだけど、時間が経つと深い眠り(ディスク上に待避、deep sleep, SafeSleep)に入ると。で、このへんはpmsetコマンドで設定を見たり変えたりできる。

$ pmset -g
Active Profiles:
Battery Power		-1
AC Power		-1*
Currently in use:
 standbydelay	4200
 standby	1
 womp		0
 halfdim	1
 panicrestart	157680000
 hibernatefile	/var/vm/sleepimage
 networkoversleep	0
 disksleep	0
 sleep		0
 hibernatemode	3
 ttyskeepawake	1
 displaysleep	30
 acwake		0
 lidwake	1

standbydelayがdeep sleepに入るまでの時間で、4200秒=70分てことで丁度ログとも符合する。

hibernatemodeがdeep sleepに入るかどうかを制御するパラメータで、MacBookとかはデフォルトが3で、standbydelay後にdeep sleepに移行する。デスクトップだと0で、浅い眠りだけでディスクには書き出さないので電源(バッテリ)が切れると内容が失われちゃう。詳しくはman pmsetで。


というわけで自分の場合は、

  • 半日ぐらいならバッテリはもつので浅いsleepでOK
  • 数日使わないときは明にシャットダウンする

という運用にすることにして、 hibernatemode 0 にした塩梅です。