2GBのMacBook Air 2009にmacOS Montereyをインストールしてみたら、あまりの動かなさに頭から湯気が出たかぼしーです。
こんにちは。
さて、この記事ではkernel_taskの暴走したMacの動作が激重になった場合の対処方法についてご紹介します。
目次
そもそもkernel_taskとはなんだ?
「kernel_task」はmacOSに組み込まれたプロセスでマルウエアなどMacに害を与えるものではありません。
Appleによると
kernel_task は、その機能の 1 つとして、CPU を集中的に使うプロセスの CPU 使用率を下げるというやり方で、温度管理を助けています。つまり、kernel_task は、Mac 本体の温度が高く感じられない場合でも、CPU の温度が上がり過ぎる原因となる状況に対処するプロセスです。それ自体がその状況を引き起こしているわけではありません。CPU の温度が下がれば、kernel_task の活動は自動的に治まります。
Apple kernel_task の Mac CPU の使用率が高い場合
とのことで、「kernel_task」がCPUに負荷をかけることを装い、相対的にそれ以外がCPUに負荷を掛けづらくすることで、CPUの温度を下げようとするなどの働きをするそうです。
よく言えばAppleの漢気というか、「全ての批判はオレ(kernel_task)が背負う…だからCPU、お前は休め!」みたいなやり取りがありそうなイメージです(イメージです)
ただ、利用者からすれば非常に困る話ですし、歓迎すべきことではありません。
kernel_taskの暴走を確認方法
アクティビティモニタを立ち上げます。
すると、「kernel_task」がCPUに負荷をかけていることが分かります。
なお、デフォルトではシステムプロセスが非表示になっている可能性があります。
メニューバーにある「表示」をクリックし「すべてのプロセス」を選択すると、Macに負荷をかけているすべてのプロセスを確認できます。
kernel_taskの暴走を止める方法
対処した時のリスクの低い順からご紹介します。
再起動をする
これは典型的な対処法になりますが、一度試してみるのも手です。
これで直ってしまえば問題はありませんが、おそらくこの記事を読まれている方は再起動で治らなかったか、一時的に直っても、再びkernel_taskがCPUに負荷をかけていると思います。
ウイルスの確認
こちらもよくkernel_taskの暴走の際に紹介されるポイントです。
可能性の1つとして考慮しておきましょう。
発熱を確認する
前述のとおりCPUの温度が高い場合に発生する可能性があります。
ファンは正常に動作しているか、通気口がふさがれていないかを確認してみましょう。
SMCのリセット
Intel Macの場合にはこのSMCをリセットすることにより解決する場合があります。
前に書いた記事、「Macの不具合、不調を解決!SMC や NVRAM / PRAM をリセットする方法」でも少し触れましたが、SMC (System Management Controller) はファンやその他の熱管理機能を制御しています。
そのため、CPUの温度が高いにもかかわらず、ファンが回らない/低速にしか回らない場合などで、CPUが高温を維持してしまうといった問題が起きている時などでも、このkernel_taskの暴走が発現する可能性があります。
T2チップを搭載したMacBookシリーズでは 左側の control キー + 左側の option (Alt) キー + 右側の shift キー を長押しします。
3つのすべてのキーを 7 秒間押し続け、さらに電源ボタンも加えます。このまま4つ全てのキーをさらに 7 秒押し続けてから、指を放します。
数秒待ってから、電源ボタンを押して Mac の電源を入れます。これで完了です。
T2チップを搭載せず、バッテリーが取り外せないMacBookシリーズでは
Mac をシステム終了します。 内蔵キーボードで、以下のキーをすべて長押しします。
- 左側の shift キー
- 左側の control キー
- 左側の option (Alt) キー
- 電源ボタン
上記 4つのすべてのキーを10秒間押し続けます。
数秒待ってから、電源ボタンを押して Mac の電源を入れます。これで完了です。
それ以外のMacの場合にはこちらの記事をご覧ください。
Macの不具合、不調を解決!SMC や NVRAM / PRAM をリセットする方法
バッテリーの確認
MacBook シリーズのようにバッテリーを搭載したMacでは、バッテリーに著しい劣化や問題があるとkernel_taskがCPUに負荷をかけ、Macの動作に影響が出ることがあります。
バッテリーの状況を確認する方法
Macのバッテリーが膨らんでいるなど、目視でバッテリーのトラブルが確認できるケースもありますが、そうでない場合にはシステムレポートで確認することができます。
左上にあるAppleメニューから、「このMacについて」をクリックし、出てきたウィンドウにある「システムレポート…」と記載されているボタンを選択します。
システムレポート(システム情報)が開いたら、左ペインから「電源」をクリックします。
すると、「バッテリー情報:」の下に「状態:」という項目があると思います。
もしも、この状態の横に「正常」とあればバッテリーは正しく機能しています。
ここが「修理サービス推奨」となっている場合には、新品購入時や正常動作時と比べバッテリーが劣化していることを示しています。ただ、「修理サービス推奨」となっていても、kernel_taskが暴走するとは限りません。
もしも、システムレポート上で「バッテリー情報:」が表示されていない場合、つまりバッテリーを認識していない場合にはkernel_taskが暴走する可能性があります。
この場合にはMacのバッテリーを交換するか、SMCリセットなどを試すことをお勧めします。
ACPI_SMC_PlatformPlugin.kextを削除する
※この方法は多方面にリスクがある可能性があるため、おすすめはしません。
※自己責任で作業をお願いします。
当方でこのトラブルが発生したMacBook Air 2009はそもそも1,600円で購入したジャンクのMacであったこともあり、SSDはおろか、バッテリーもついていませんでした。かといって、2021年12月現在MacBook Air 2009のバッテリーも入手できないために、ここはACPI_SMC_PlatformPlugin.kextを削除して対処しました。
ちなみに、ACPI_SMC_PlatformPlugin.kextの中にあるplistファイルを削除する方法もあります。
Mac OS X YosemiteまでのOSでACPI_SMC_PlatformPlugin.kextを削除する方法
Mac OS X YosemiteまでのOSであれば、ターミナルで下記のコマンドを実行するか、Finderで「/System/Library/Extensions/IOPlatformPluginFamily.kext/Contents/PlugIns/」まで開き、ACPI_SMC_PlatformPlugin.kextを削除します。
ターミナルでACPI_SMC_PlatformPlugin.kextを削除する場合は
cd /System/Library/Extensions/IOPlatformPluginFamily.kext/Contents/PlugIns/ACPI_SMC_PlatformPlugin.kext
sudo mv ACPI_SMC_PlatformPlugin.kext ACPI_SMC_PlatformPlugin.bak
を実行します。
これで、完了です。
ACPI_SMC_PlatformPlugin.kext諸共削除ではなく、最低限の変更にとどめたい場合には機種IDを調べておき、
/System/Library/Extensions/IOPlatformPluginFamily.kext/Contents/PlugIns/ACPI_SMC_PlatformPlugin.kext/Contents/Resources
の配下にある機種IDと同名のplistファイルを削除します。
例えば、MacBook7,1であれば、「MacBook7_1.plist」を削除します。
機種 IDの調べ方
ターミナルを開き、下記のコマンドを入力しreturn (Enter)キーを押下します。
system_profiler SPHardwareDataType | grep 'Model Identifier'
この時、「Model Identifier: 」の横に出力された文字列が「機種 ID」になります。
Mac OS X El CapitanからmacOS MojaveまでのOSでIOPlatformPluginFamily.kextを削除する方法
Mac OS X El CapitanからはACPI_SMC_PlatformPlugin.kextを削除するためにはSIP(System Integrity Protection)を無効にする必要があります。
Macの電源を切ります。
電源ボタンを押したと同時に command キー + R の 2つのキーを画面が変わるまで押し続けます。
暫く待つと、macOS 復旧が起動します。
言語の選択を求められたら使用した言語を選択し「→」をクリックします。
macOS 復旧のユーティリティウインドウなども立ち上がりますが、ひとまず無視して、メニューバーの「ユーティリティ」から「ターミナル」をクリックするか、キーボードで「Shift キー + command (⌘) + T」を押下してターミナルを立ち上げます。
起動したターミナルに
csrutil disable
と入力し実行します。
この時、
Successfully disabled System Integrity Protection. Please restart the machine for the change to take effect.
と返ってきたら成功です。
Macを再起動させます。
ターミナルで下記のコマンドを実行するか、Finderで「/System/Library/Extensions/IOPlatformPluginFamily.kext/Contents/PlugIns/」まで開き、ACPI_SMC_PlatformPlugin.kextを削除します。
ターミナルでACPI_SMC_PlatformPlugin.kextを削除する場合は
cd /System/Library/Extensions/IOPlatformPluginFamily.kext/Contents/PlugIns/ACPI_SMC_PlatformPlugin.kext
sudo mv ACPI_SMC_PlatformPlugin.kext ACPI_SMC_PlatformPlugin.bak
を実行します。
これで、完了です。
macOS CatalinaでACPI_SMC_PlatformPlugin.kextを削除する方法
macOS Catalina ではSIPを無効にするだけではACPI_SMC_PlatformPlugin.kextを削除することはできません。
とは言え、まず行うのはSIPを無効にすることからです。(FileVaultが有効になっている方は先に無効にします。)
まずはMacの電源を正しく切ります。
電源ボタンを押したと同時に command キー + R の 2つのキーを画面が変わるまで押し続けます。
暫く待つと、macOS 復旧が起動します。
なお、使用する言語の選択を求めてきた場合には、使用したい言語を選択し「→」をクリックします。
macOS 復旧のユーティリティウインドウが立ち上がりますが、ひとまず無視して、メニューバーの「ユーティリティ」から「ターミナル」をクリックするか、キーボードで「Shift キー + command (⌘) + T」を押下してターミナルを立ち上げます。
起動したターミナルに
csrutil disable
と入力し実行します。
この時、
Successfully disabled System Integrity Protection. Please restart the machine for the change to take effect.
と返ってきたら成功です。
Macを再起動させます。
ここで、さっそくACPI_SMC_PlatformPlugin.kextを削除していきたいところですが、macOS Catalina以降はmacOSのシステムデータを読み取り専用のシステムボリュームに格納するようになったため、単純に読み書きができません。
次にシステムボリュームをライタブルな状態でマウントします。
ターミナルを起動させ以下のコマンドを実行させます。
sudo mount -uw /
これで、システムボリュームをライタブルな状態でマウントできたので、続けて
cd /System/Library/Extensions/IOPlatformPluginFamily.kext/Contents/PlugIns/ACPI_SMC_PlatformPlugin.kext
sudo mv ACPI_SMC_PlatformPlugin.kext ACPI_SMC_PlatformPlugin.bak
と入力し、再起動させます。
以上で完了です。
macOS Big Sur以降のOSでACPI_SMC_PlatformPlugin.kextを削除する方法
続いて、macOS Big SurやmacOS MontereyでACPI_SMC_PlatformPlugin.kextを削除する方法を見ていきましょう。
まずはSIPを無効にします。(FileVaultが有効になっている方は先に無効にします。)
もしもOpenCore Legacy Patcherを使用してる場合のSIPを無効する方法はこちらの記事をご覧ください。
> OpenCore Legacy PatcherでSystem Integrity Protection(SIP)を無効にする方法
Macの電源を切ります。
電源ボタンを押したと同時に command キー + R の 2つのキーを画面が変わるまで押し続けます。
暫く待つと、macOS 復旧が起動します。macOS 復旧のユーティリティウインドウなども立ち上がりますが、ひとまず無視して、メニューバーの「ユーティリティ」から「ターミナル」をクリックするか、キーボードで「Shift キー + command (⌘) + T」を押下してターミナルを立ち上げます。
このターミナル上で、
csrutil disable
と入力し実行します。
そして下記のメッセージが返ってきたらSIPを無効にすることができました。
Successfully disabled System Integrity Protection. Please restart the machine for the change to take effect.
再起動させましょう。
次にシステムボリュームのIDを調べます。(把握している場合には省略できます。)
ターミナルを開き、
diskutil list
と入力し、return(Enter)キーを押します。
ここで、MacのシステムボリュームのIDが「disk1s5」であることを確認します。
続いてマウントし、ACPI_SMC_PlatformPlugin.kextを削除した後、カーネルキャッシュの再構築しスナップショットを作成します。
下記のコマンドをターミナルに入力し実行します。
mkdir -p -m777 ~/mount
下記はシステムボリュームのIDが「disk1s5」であった場合です。
先ほど確認した際に「disk1s5」ではなかった場合には書き直してください。
sudo mount -o nobrowse -t apfs /dev/disk1s5 ~/mount
cd ~/mount/System/Library/Extensions/IOPlatformPluginFamily.kext/Contents/PlugIns/
sudo mv ACPI_SMC_PlatformPlugin.kext ACPI_SMC_PlatformPlugin.bak
sudo kmutil install --update-all --force --volume-root ~/mount
sudo bless --folder ~/mount/System/Library/CoreServices --bootefi --create-snapshot
再起動すると、なんということでしょう…。
あれほど筆者を悩ませていた動作の遅さはどこにやら。
何度窓からぶん投げようと思ったかわからないMacBook Airが、快適なMacBook Airへと生まれ変わりました。
アクティビティモニタもご覧ください。
あのユーザを困らせていた恐ろしい赤で染まったグラフが、のびのびと利用できそうな優雅な空間に大変身しました。
ただし、MacBook Air 2009のようにメモリが2GBのMacでは典型的な「メモリ不足のPC」から生まれ変わることは変わりません。
これでもめちゃめちゃめちゃ快適になりましたが、圧縮とメモリスワップでどうにか動かしてる感じです。
まとめ
いかがでしたでしょうか?
ACPI_SMC_PlatformPlugin.kextを削除する場合にはファンの制御やスリープなどの電源関係に影響を及ぼす可能性があります。
本来kernel_taskがCPUに負荷を掛けるという事は、Macに何らかのトラブルが発生しており、そのトラブルからMacを守ろうとしています。原因究明をしてできるだけ、それを改善していくんだ!というスタンスで解決にあたるようにしていただければと思います。
ちなみに、こうして快適になったMacBook Air 2009ですが、kernel_taskが暴走している時にどれくらい遅いかというと、「スクリーンショット2枚をUSBメモリにコピーする」という単純なミッションに5時間くらいかかりました。
あまりの動作の遅さと、フリーズ天国なMacにしびれを切らせ、頭から湯気が出ていた筆者でした。無事に使えるようになってよかった…。
では、引き続き楽しいMacライフを!
ありがとうございました!
2021.12.24 altとキャプションを追加しました。