🔌

Macがスリープ中にバッテリーが爆減りしだしたので解決するためにした事

2024/05/27に公開

経緯

2023年10月ほどに以前から使用していたMacBook Pro(OS sonoma)がスリープ後に再度開くとバッテリーを消費しきってしまう現象が発生した。前日にMacBookを利用後翌日にはMacが電源なしでは操作できない状態となっていたため非常に面倒なため調査を開始
似たような症状は他の知人MacBook Pro(OS Ventura)でも再現していた

対象の人

  • Mac設定のログイン項目の見直しを行ったが解決できなかった人、あるいは原因と思われるアプリケーションの設定をオフにすることが出来ない人
  • MacのSMCのリセットなどを行ったが全然解決ができなかった人
  • 他のサイトなどでMacバッテリードレインについて調べたが解決できずにっちもさっちも行かない人

実行環境

MacBook Pro 2020 13-inch
プロセッサ 2.3 GHz クアッドコアIntel Core i7
OS Sonoma 14.4.1

考えられた原因

システムlogなどを確認したが原因の特定には至らなかった。暫定原因としてMacのバッテリードレインの原因としてよく上がるChrome,Dockerなどのアプリケーションの挙動によりスリープモードそのものが阻害されていると予測を行い対策を考察し対策を実施

ログ確認で行なったこと

ターミナル上でsyslog を確認などしたがバッテリーが減少中のログが存在しなかった(スリープ中だったためか?)

バッテリー残量のメータについても表示がおかしく?なっており、ある時間にバッテリー残量が消失するようになっている。また、下記表では03時から07時までにかけてバッテリー残量が回復しているがそもそもその時間帯はMacを充電していない
明らか見かけと実態が異なるように感じバグっているように見えるのだが、もしかしてMacの設定機能のUIはわかりにくものが多いためこれも直感に反した内容の一つなのだろうか?

対応

今回はスリープ時にアプリケーションが起動されスリープ状態が阻害されている可能性があるため、スリープ時にアプリケーションが起動しないようにシステムを永続ストレージに退避させる事で解決できないかと考えた
スリープ設定変更する方法はTerminalよりpmsetコマンドを利用する(pmsetでしか設定できないものがあるため)。今回提示する2種類の設定を変更するを行うことでスリープモードのバッテリードレイン問題が改善された

pmsetについて

pmsetについての詳細を確認したい方はmanコマンドを利用するか、参考にてpmsetコマンドについて詳しく記述されている記事があるため参考されたし
なお本記事で記載されている情報はSonoma 14.4.1のものなので注意

電源制御の設定を確認するコマンド

$ pmset -g
$ sudo pmset -b {設定項目} {設定値}

pmsetはバッテリーモード毎でそれぞれ設定を行う事ができる。例えばバッテリーモード(電源を差してない状態)での設定は-bオプションはでの設定適用を指定している。他の電源種別での設定方法は以下の通りである

電源種別 オプション
バッテリー -b
充電器 -c
UPS -u
すべて -a

対応1 スリープモードの種別を変更(hibernatemode)

$ sudo pmset -a hibernatemode 25

Mac OSにはスリープ時の挙動として何種類かのスリープモードがあり、モード時によって休止時のメモリーの状態の保存方法が変わる
このスリープモードでメモリーでの復帰を停止させる事が対応1となる

以下manコマンドで確認した際の要約

0 メモリーより復旧 (充電器モードでの初期値)

メモリの状態を永続ストレージに退避を行いません。またシステムの内容はメモリに保存されます。メモリーに電源の供給が失われるとシステムの状態が失われる

3 メモリーのコピーを永続ストレージに保存 (バッテリーモードでの初期値)

システムをメモリに退避した上で永続ストレージにメモリーのコピー保存します。電源が供給されている際はメモリーより復帰を行い、電源が供給されていなかった場合は永続ストレージより復帰を行う

25 メモリーのコピーを永続ストレージに保存しメモリーは停止

システムをディスクイメージに退避かつメモリーのコピーを永続ストレージに保存します。スリープ時には電源の供給を停止し、復帰時は永続ストレージから復帰を行う
このモードを設定した場合は復帰時間は遅くなりますが、バッテリーセーブな挙動となる
この設定はpmsetコマンドでのみ設定可能です

対応2 スタンバイ状態への移行時間を短くする(standbydelayhigh)

$ sudo pmset -b standbydelayhigh 1800 standbydelaylow 600

macOSにはスリープ状態を一定経過後に永続ストレージにシステムの状態退避しハードウェア(メモリやUSBバス)に電源供給がされなくなるスタンバイ状態というものがあります
このスタンバイ状態への移行を早める事でシステムを永続ストレージに退避させる事が可能となる
上記例ではバッテリーの残量が多い(設定highstandbythresholdに依存)場合は30分(1800秒)バッテリーが少ない場合は10分(600秒)でスタンバイ状態となるように設定している

おまけ

この記事ではpmsetを利用して解決を記述しているが、筆者がそれ以外で実施した解決しなかった事を記載する

pmset以外で対処したが無駄だった事

Macbookの設定の変更

  • ログイン項目の見直し
  • SMCのリセット
  • バッテリー使用時の低電力モードの使用
  • Power Napを有効にするを「しない」に変更
  • バッテリー駆動時のロック画面の時間の設定

Dockerの設定変更

リソースサーバーの設定有効にする

Chromeの設定変更

Chromeの設定より電源を省エネモードにするあるいはChromeで利用するメモリー量を減らす

参考

pmsetについてはQiitaにて非常に詳しく記述されている方がいるため下記記事がオススメ
https://qiita.com/usagimaru/items/70cc39d5b1b0368fe028

Discussion