世界を動かす技術を、日本語で。

MacBook Proの不眠症

概要

  • MacBook Pro M1 Max のバッテリー異常消耗問題の発生
  • pmset -g log や独自ツールによる原因調査
  • Sleep Aid アプリの利用と設定変更
  • 「Wake for maintenance」設定の重要性
  • 設定変更後のバッテリー問題解決

MacBook Pro M1 Max バッテリー異常消耗の原因調査と解決

  • 長期間問題なく動作していた MacBook Pro Silicon M1 Max で、突然バッテリーが夜間に大幅消耗する現象の発生
  • 電源未接続で放置中にバッテリー残量が著しく減少する症状
  • pmset -g log コマンドにより、電源管理関連の詳細ログを確認
    • ログが非常に多く、読み解くのが困難という課題
  • 独自のログ解析ツールを作成し分析を試みるも、効果は限定的
  • tcpkeepalive などの設定を一つずつ調整するも、問題解決には至らず
  • さらなる調査の結果、 Sleep Aid というツールの存在を知る
    • Wakeイベントの視覚的な表示と、設定の簡単な変更が可能
  • Sleep Aidの設定画面で「 Wake for maintenance」オプションが無効になっていることを発見
    • Sleep Aidのインターフェースで、この設定が無効だと頻繁なWakeイベントが発生する可能性があると説明
  • 「Wake for maintenance」を有効化することで、バッテリー消耗問題が解消
    • 夜間未接続時でもバッテリーが正常に維持されるように改善

Sleep Aidの活用ポイント

  • Wakeイベント の発生状況を直感的に把握できるインターフェース
  • システム設定 の変更をGUIで簡単に実施可能
  • トラブルシューティング時の有用なサポートツール
  • 「Wake for maintenance」など、特定設定の有効・無効がバッテリー消耗に大きく影響する可能性

バッテリー消耗トラブル時の基本対策

  • pmset -g log で電源管理ログの確認
  • サードパーティ製ツール(例: Sleep Aid)の活用
  • システム設定の一つ一つを見直し、特に「Wake for maintenance」などのオプションに注意
  • 問題が解決しない場合は、さらに詳細なログ調査やAppleサポートへの相談も検討

Hackerたちの意見

私の場合、「メンテナンスのために起動」オプションが無効になっていて、スリープエイドが設定画面でこれが頻繁な起床イベントにつながる可能性があるって教えてくれたんだ。著者は「オプションが有効になっていた」と書くつもりだったのかな?

私も混乱してる。明確にコンピュータを起こす設定を有効にすると、逆に起きる回数が減るの?

同じことを考えたんだけど、これは完全に推測だけど、私の中では納得できる。設定が無効になっていると、起床イベントが1時間ごとの起床にまとめられず、夜中にランダムに起こる可能性があるんじゃないかな。それがすぐに説明されている行動につながると思う。

私も同じく混乱してる。

私も混乱してる。著者のスクリーンショットでは「有効」になってるから、それが「固定」状態だと思ったけど、無効にするともっと起きる理由が直感的じゃないね。

直感に反する発言は、詳しく説明するか、少なくともそうだと認識されるべきだよね。書いた後の編集は難しいから、そういう問題を見つけるのが大変なんだよ。

私のiPadは、全く使わなくても数日しか持たないんだ。設定をどう変更すれば、例えば1ヶ月後に手に取ってもバッテリーが死んでない状態にできるのか、全然わからない。

厳しい提案だけど、デバイスからiCloudにログアウトしてみて。これでうまくいけば、さらに原因を絞り込めるかも。

それは「探す」機能だね。特にいい解決策はないけど、今は使ってない時はiPadをオフにしてるよ。

プッシュ通知とバックグラウンド同期を無効にしてみて。これらは常に最もアイドル状態の電力を消費する原因になるから。

新しいA16 iPad、閉じてる状態でも思ったより電力を使ってるみたい。これを言いに来たんだけど、先に言われちゃったね。誰かこの件について考えがあれば教えてほしいな。私はAndroid派だから、まだオプションに詳しくないんだ。iPadには、どのアプリやサービスが電力を使ってるかを説明する電力使用アプリってあるのかな?Apple Pencilを準備するためのBluetoothとか。

https://support.apple.com/en-mn/guide/mac-help/mh40774/mac これが公式の設定オプションとして利用できるみたいだね。

編集2: ごめん、パワーナップは「ネットワークアクセスのために起きる」って意味だと思ってた。macOS 26ではもうそのオプションがないみたい。うちのは「電源アダプタ使用時のみ」に設定されてるから、まあ納得だね。編集: M4 MacBook AirでmacOS 26 DBを使ってる。

M4 MacBook AirでmacOS 26 DBを使ってるけど、その場所にパワーナップは見当たらないな。「ネットワークアクセスのために起きる」ってのは見えるけど、これが新しいやつかも。デフォルトでは「電源アダプタ使用時のみ」に設定されてる。

これ、昔のMacBook Proでもあったな。Apple Siliconじゃないやつだけど。問題は、ルーターのDHCPリース時間をデフォルトからすごく短く変えちゃったこと。15分に設定してたと思う。多分、MBPが15分ごとにIPアドレスを更新するために起きて、また寝る頃には再び起きてそのプロセスを繰り返してたんだと思う。ルーターの値をデフォルトに戻したら、MacBook Proのバッテリー消耗問題が完全に解決したよ。原因と結果を結びつけるなんて思わなかったけど、新しいMacBook Proを買った時期と重なってたから、問題にもっと注意を払ってたんだ。

これはmacOSのバグだね。寝てる間にIPアドレスは必要ないはず。DHCPリースを更新するために起きるなんておかしいよ。クローズドソースのOSは本当に厄介だ。

機能的なDHCPクライアントは、リースの半分のところでIPアドレスの更新をリクエストするから、思ってたよりも悪化してたかもね。

それ、めっちゃ変だね。「起きてリースを更新する」だけでどれくらいのmAhがかかるんだろう?ミリアンペア・ミリ秒(mAmS)って感じ?私の電話は、結構深いスリープモードでもセルネットワークとずっとやり取りしてると思うし。ノートパソコンはWiFiスタックを点灯させてパケットを送受信(処理)してるだけだよね?でも、言った通り、これはAppleシリコン前のやつだから、実際のところは誰にもわからないよね!もしかしたら、起きてる間に他のこともやってたのかも?

ルーターのDHCPリース時間をデフォルトからすごく短い値に変えたんだ。たしか15分に設定したと思うけど、何を狙ってたの?

わお、ルーター(mikrotik)のデフォルトが10分のリース期間だって今知った!

アクティビティモニタには「エネルギー」タブがあって、こういう時に便利なんだよね。どのアプリがスリープを妨げているか教えてくれるし、過去12時間のプロセスの電力使用量も表示してくれるから、「夜の睡眠」の後に調べれば、犯人をすぐに見つけられることが多いよ。

もう一つの方法は、アクティビティモニタを開いて「エネルギー」タブに切り替えて、「スリープを妨げている」列でソートすること。いくつかのアプリがmacOSのスリープを妨げるんだ。私の場合は、Devonthink(ドキュメント/ノート管理アプリ)が原因だってわかった。バグレポートを出そうと思ってるんだけど、Appleの電力管理にこれを知らせるアラートがないのが驚き。バックパックに入れてる間にMacが熱くなってバッテリーが減っていくのは、かなり重要な問題だと思うんだけどね。一方で、Chromeがネットワーク上のデバイスを見つけるのを許可するかどうか聞かれるのは、そんなに重要じゃない気がする。

どんなランダムなアプリでもシステム全体のスリープを妨げることができるなんて知らなかった。これってユーザーが制御できる権限の後ろに隠されるべきじゃないの?開発者は、これを呼び出すために少なくとも権限を使う必要があると思うんだけど…?

両方あった方がいいと思うし、クロームの方が実装しやすいんじゃないかな。許可を求めるか、求めないかのどっちかだしね。蓋を閉じた後にマシンを起こしておく正当な理由もあるから(接続を切るとか、ファイルをディスクに保存するとか)、どれくらい長く続けるかを判断するのは難しいかもしれないね。

Appleの電源管理にこれに関するアラートがないのは驚きだよ。さらに驚くのは、アプリが蓋を閉じたときにスリープを防げること。タイムアウトでスリープを止めるのは理解できるけど、メディアプレーヤーが「映画見てるから、ちょっと触らなくてもオフにしないで」ってシステムに伝えるのは分かる。でも、蓋を閉じたりスリープボタンを押したりしても、システムをスリープさせないアプリの正当な使い道はあまり思いつかないな。ほとんどの場合、誰かのバッグの中でノートパソコンがオーバーヒートするだけだと思う。特に、ランダムなウェブページがシステムのスリープを防ぐなんて、ちょっとおかしいよね。ノートパソコンがオフにならない... どの70タブが原因なんだ?! もしかしたら、2つの許可に分けることで多くの問題が解決できるかも。たくさんのものがタイムアウトでスリープを無効にするのはいいけど、「蓋を閉じたら=スリープ」みたいなコアの電源動作を変えるのは、ユーザーに確認して知らせるべきだと思う。

一方で、SafariはNetflixを見ているときに「Netflixを閉じますか?」って聞いてくるんだよね。電力を使いすぎるから。

これまで所有してきた各Macノートパソコンでは、「蓋を閉じたらハイバネート」に設定してこの問題を回避してきたよ。Macの蓋を開けると、再開するのに20〜30秒くらいかかるけど、信頼できるスリープと蓋を閉じた時のバッテリー消耗が少ないことを考えれば、これは小さな代償だと思ってる。試してみたいなら、ターミナルで以下を実行してみて:sudo pmset -a hibernatemode 25 もし気に入らなかったら、デフォルトに戻すには:sudo pmset -a hibernatemode 3

面白いことに、先週ほぼ同じブログ記事を書いたんだけど、残念ながらその解決策は私には効かなかった。別のプロセスが私のMacを起こしてるんだ:https://annoying.technology/posts/3e451c7b/

初代のユニボディアルミiMacを使ってたとき、講義の終わりに閉じると、全然スリープしなくて、数時間後にバックパックから取り出すと、触るのが危険なくらい熱くなってて、バッテリーもほぼ空になってたことがあった。デバッグしようとしたけど、結局毎回シャットダウンするしかなくて、ほんと最悪だった。少なくとも、火事にはならなかったけどね。

旅行中、2晩連続で蓋を閉じてスタンバイ状態のままバッテリーが100%から0%になったことがあった。結局、エアビーの分割エアコンの近くに置きすぎてたみたい。

え、低温でバッテリーが減るの?逆だと思ってた。