Macがスリープ中にバッテリーが爆減りしだしたので解決するためにした事
経緯
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秒)でスタンバイ状態となるように設定している
対応後の経過(2024年9月17日 追記)
上記対応を行い3ヶ月経過したので効果について追記します。
結果的に言うと効果はありでした。対応前でしたらスリープモードを行った翌日はバッテリーを使い果たしているか残り数パーセントしかありませんでしたが、対応後は80%以上は残るようになりました。長期的にスリープを行わない限りはバッテリーを使い果たす事はないかなと思います
また永続ストレージにシステムの状態を退避させるため立ち上がりが遅くなる事が懸念されていましたが、意識する程の遅さは感じられません。最近のMacはストレージがNVMeSSDが採用されているのでそれで十分早いためでしょうか
おまけ
この記事ではpmsetを利用して解決を記述しているが、筆者がそれ以外で実施した解決しなかった事を記載する
pmset以外で対処したが無駄だった事
Macbookの設定の変更
- ログイン項目の見直し
- SMCのリセット
- バッテリー使用時の低電力モードの使用
- Power Napを有効にするを「しない」に変更
- バッテリー駆動時のロック画面の時間の設定
Dockerの設定変更
リソースサーバーの設定有効にする
Chromeの設定変更
Chromeの設定より電源を省エネモードにするあるいはChromeで利用するメモリー量を減らす
参考
pmsetについてはQiitaにて非常に詳しく記述されている方がいるため下記記事がオススメ
Discussion
記事を拝見しました。私もmacbook air (2020)のスリープ中バッテリー爆減りに悩まされていたひとりです。おかげさまで症状は改善され、持ち運び中にバッテリーがなくなる現象は改善されました。
ところが、夜間のバッテリー充電中に発熱しファンが回るという別の現象が現れました。バッテリーの残量を確認しても100%です。ACアダプターを抜いてバッテリー駆動にすると数分で静かになり、この後、アダプターを指しても落ち着きます。
何かお心当たりがあり、対策がおわかりでしたらご示唆をいただければ幸いです。
カトリーヌさん。記事の閲覧ありがとうございます。バッテリードレインの症状が改善して良かったです。
さて質問の内容なのですが当方では現時点では再現していないので状況を少し確認したいです
こちらの現象はMac起動中(スタンバイ状態じゃない)時に起こったのでしょうか?もし起動中で夜間の特定の時間帯の場合は特定のアプリのアップデート処理またはファイル検索システムのインデックス処理が実行されている可能性があります。アプリのアップデートはユーザーが操作しない限り行われない事が多いのですが、インデックス処理についてはユーザーが操作せずとも行われ処理が認識しずらいため、なんかPCがいきなり唸り出したなぁと感じたりすることは結構あります。インデックス処理も大体10分かからない程でおわるため、バッテリー駆動にしているうちに終わっていたと言う顛末かもしれません。
ファイルシステムのインデックス設定を調整する方法は以下のように特定のパスを除外設定するなどすれば負荷軽減は行われるので試してみて状況を確認してもいいかもしれないです。
ご返信ありがとうございます。この現象はスリープ中に起こります。ベッドサイドでスリープさせて放置していると、早朝に発熱してファンが激回りするという珍現象に悩まされています。
ご指摘のとおり、アップデートやインデックス作成の可能性もあると思うのですが、アクティビティモニタで観測しても大したプロセスは動いていません。よくわからないです・・・