スリープ中のMacが熱くなる現象がずっと前からありました。Macの熱のせいで部屋が暑いし(夏だから)、本体もかなり熱いので心配です。

Macの挙動で気になっていたのでは、スリープしているにもかかわらず接続しているディスプレイからMacの復帰を認識したときのピッという音がなることです。だいたいFacebookメッセンジャーなどのメッセージを受信したタイミングで起こっていることがなんとなくわかっていたので、実はスリープ中もネットワークがつながっていて、通知のタイミングで起こすのかな?と思っていました。

省エネルギーからいじれる設定は割といじっているので、他にも原因があるのではないかと思って色々調べてみましたところ、こんな記事をみつけたのでトライしてみました。結果しばらく様子見しようと思っています。

「スリープ時にもネットワーク接続を許可するオプションを確認」のところです。

Macでスリープ時にバッテリーが減る現象を改善する方法まとめ - wp.bmemo.pw
⚠この記事はブログ移転前のアーカイブです El capitanから?よくわからないけどMacのスリープ中にバッテリーがモリモリ減る現象が出るようになった。夜100%、朝80%とかになってたり。MBA2012モデル使ってたときは夜100%朝100%ってくらいスリープ時にバッテリーは減らなかったので、直したいなあと思ってました。原因はいくつかあるので1つずつ潰してみたいと思います。 もくじ Power Napの設定を確認する 詳細な電源設定を確認する SDカードを挿しっぱなしにしていないか スリープ時にもネットワーク接続を許可するオプションを確認 SIPをオフに TCPKeepAliveDuringSleepをオフに 12時間スリープで1%消費まで改善 Power Napの設定を確認する システム環境設定 -> 省エネルギー -> バッテリー の項目で 「バッテリー電源使用中にPowerNapをオンにする」にチェックが入っていないか確認してください。 スリープ中勝手に起きて更新やらなにやらを確認する設定です。自分の環境では既にオフ状態でした。 詳細な電源設定を確認する バッテリー電源で動作させているときに以下のコマンドを実行します pmset -g こんな感じの結果が出力されたでしょうか。 System-wide power settings: Currently in use: standbydelay 1800 standby 1 halfdim 1 hibernatefile /var/vm/sleepimage powernap 0 gpuswitch 2 disksleep 0 sleep 3 autopoweroffdelay 0 hibernatemode 3 autopoweroff 0 ttyskeepawake 1 displaysleep 3 acwake 0 lidwake 1 stanbydelay カバーを閉じてから、スタンバイモードに突入する時間です(秒)デフォルトは10800秒 hibernatemode スリープの状態を選択します。0,3,25から選択します。 各モードの意味についてはここ参照 http://www.
wp.bmemo.pw

詳しくはわかってないですが、ioregというコマンドがあって、そこでスリープ中のネットワークアクセスなどに関する設定を確認することができるようです。

紹介したブログ記事の通り実行してみると僕もまったく同じ状況でした。

% ioreg -l | grep IOPlatformFeatureDefaults
    | | |   "IOPlatformFeatureDefaults" = {"TCPKeepAliveDuringSleep"=Yes,"DNDWhileDisplaySleeps"=No,"TCPKeepAliveExpirationTimeout"=43200,"NotificationWake"=Yes

表に整理すると、こうなっていました。キー名から推測した意味も書いておきます。

KeyValue意味(推測)
TCPKeepAliveDuringSleepYesスリープ中にTCP通信を維持するかどうか
DNDWhileDisplaySleepsNoディスプレイのスリープ時にはDND(おやすみモード的なの)にする
TCPKeepAliveExpirationTimeout43200TCPを維持する時間(秒)
NotificationWakeYes通知時に起きる

意味が推測通りだとしたら、僕が気になってたメッセージを受け取るとスリープから解除するというのは、NotificationWakeによるものではないかという気がします。

正直、スリープ中にネットワークに接続したい用途は一切ないので、先ほどの記事のように設定を書き換えました。

手順は元記事を見ていただいたほうがいいような気がします。他にも関連してそうな情報が載ってるので。。。

さて、無事設定を変更して再度コマンドで確認をすると以下のようになっており、無事想定通りの結果になっていることがわかりました。

% ioreg -l | grep IOPlatformFeatureDefaults
    | | |   "IOPlatformFeatureDefaults" = {"DNDWhileDisplaySleeps"=Yes,"TCPKeepAliveDuringSleep"=No,"NotificationWake"=No}
KeyValue
TCPKeepAliveDuringSleepNo
DNDWhileDisplaySleepsYes
NotificationWakeNo

これでメッセージ受信でスリープ解除されないか、毎朝熱くなっていないかどうかなどをを確認したいと思います。