2018年12月14日金曜日

【備忘録】macOS でスリープから復帰がとても遅いときがある場合の対処

macOS 10.14 になってから顕著になったなぁと思って、ネットで調べた対処方法をまとめて置きます。現状は検証中なので、効果があるかどうかはわかりません。ただ備忘録としてメモしておかないと忘れそうなので先にメモっておく感じです。

原因


SSD内蔵の macOS 搭載マシンについては、節電対策としてスタンバイモードというのが搭載されています。バッテリー駆動時にスリープして一定時間がたつとディープスリープ(休止モード)になるモードのことです。
macOS 10.14 のデフォルトでは、スタンバイモード設定については、次のようになっています。
(ターミナルより pmset -g で確認可能)
  • stanby 1 (スタンバイ有効)
  • standbydelayhigh 86400(1日) - バッテリ駆動時
  • standbydelaylow 10800(3時間)- バッテリ駆動時
ディープスリープ(休止モード)は、デフォルトの「セーフスリープ」設定の場合、バッテリーが少なくなってきたときか、一定時間待機(ここが曲者)したら自動移行します。
ディープスリープは、メモリ内容をSSDに保存して完全に電源OFFにして、次回復帰時にSSDからメモリへデータを復帰させるため、物理メモリ搭載量が多ければ多いほど時間がかかる可能性が高くなります。。
ここで問題なのは、一定時間待機という一定時間が、3時間かもしれないという点です。3時間スリープしたらディープスリープになっちゃうかもねーってのは「ちょっと短すぎない!?」ってことです。急いでいるときに、しばらく無反応でレインボーカーソルがぐるぐる回りだして、ジーと待たないといけないのにイラってきているなら、やる価値はありそうです。なお、バッテリーを頻繁に完全放電するような人には向きません。

さてこれでうまくいくかはしばらく使ってまたコメントいれます。

STEP 1. スタンバイ時間を長くする

  • hibernatemode 3 (セーフスリープ)
  • standbydelayhigh 86400(1日)
  • standbydelaylow 10800(3時間)
だったのを
  • hibernatemode 3 (セーフスリープ)
  • standbydelayhigh 604800(1週間)
  • standbydelaylow 604800(1週間)
にしちゃえというものです。

ターミナルアプリより

sudo pmset -a standbydelay  604800

とすることで設定できます。

ただ、そうすると Bonjour (mDNS)によるスリープからの復帰問題によってバッテリーが意図せず浪費する可能性があります。参考:Macでスリープ時にバッテリーが減る現象を改善する方法まとめ

Bonjour (mDNS)がどれぐらい動いているかは、

log show --style syslog |fgrep "Wake reason"

とタイプして、

Wake reason: RTC (Alarm) が大量に出ているようなら、Bonjour (mDNS) がスリープ時に動いていることになります。

そうした場合には STEP 2. にて止めると良いとのことです。プリンタも最近は Bonjour ではなく、Air Printとか IP(TCP/IP)プリントとか出来るものも多いですしねぇ。

STEP 2. Bonjour (mDNS) を止める



ターミナルアプリより

sudo  defaults write /Library/Preferences/com.apple.mDNSResponder.plist NoMulticastAdvertisements -bool YES

を実行して設定した上で、

sudo launchctl unload /System/Library/LaunchDaemons/com.apple.mDNSResponder.plist
sudo launchctl load /System/Library/LaunchDaemons/com.apple.mDNSResponder.plist

で mDNSResponder を再起動する(あるいは端末を再起動する)。

2018年12月14日 @kimipooh