Kernel Panicと予期せぬシャットダウンの原因を突き止める

先日、Mac mini 2018のCPU負荷が上がった際にファンが高速回転し、CPU負荷が下がった後もファンの回転数が下がらないという問題に遭遇した。

仕方がないので一度Macを再起動したのだが、以降カーネルパニックが頻発するようになったため、今回遭遇した現象の説明、及びカーネルパニックや予期せぬシャットダウンが発生した際の原因の特定方法の手順を解説する。

問題が発生したMac環境と症状

問題が発生したMac及びmacOSは以下の通りである。

  • Mac mini 2018 Core i7 8700B
  • Blackmagic eGPU Radeon Pro 580をThunderbolt 3>DisplayPort変換ケーブル接続
  • macOS Catalina 10.15.5(追加アップデート適用済み)

症状は冒頭でも書いた通りMacのCPU負荷が上がりファンが高速回転したが、負荷が下がった後も常に上限値(4400rpm)で回転し続けるというもの。

その際に再起動を試みたが、再起動自体は正常に行われ、ファンの回転数も正常に戻ったものの起動と同時にカーネルパニック、もしくはシステムの予期せぬシャットダウンが行われたことを示す問題レポートが表示された。

これ以降、ファンの回転数の異常は発生していないが再起動すると高確率でカーネルパニックが頻発するようになってしまった。

ただ、毎回発生するわけではないため何が原因なのかイマイチわからない。

なお、ファンの回転数に異常が発生した際、僕はいかなるファンコントロールアプリケーションも実行していない。

カーネルパニックや予期せぬシャットダウンが発生した際に試すこと

ログを確認する

通常、このような問題が発生した場合はまずシステムログや診断レポートで原因を特定するのが定石だ。

「問題が発生したためコンピュータを再起動しました」というウィンドウにある「詳細情報を表示」をクリックしてもいいが、ここでは「コンソール」を使おう。

まずアプリケーションフォルダの「ユーティリティ」、もしくはSpotlightなどで「コンソール」と検索しコンソールアプリケーションを起動する。

コンソールを開いたら左サイドバーから「ログレポート」を選択し、カーネルパニックや予期せぬシャットダウンが発生した時間を目安にログを探す(上記画像では「panic-full-2020-06-27~」)。

該当するログを選択すると画面下部にログレポートが表示される。

上記画像では「Power State(電源状態)」に問題が発生しているようだが、何が原因になったのかまでは把握できなかった。

DiagnosticReportを確認する

下記のパスをFinderの「移動」>「フォルダへ移動」に入力してDiagnosticReportを確認するという方法もある。

/Library/Logs/DiagnosticReports

このフォルダには各アプリケーションの診断情報やクラッシュログが格納されているが、カーネルパニックや予期せぬシャットダウンに関する情報はユーザーが理解可能なフォーマットでは記録されておらず、カーネルパニックなどの場合は有用な情報はあまりないことが多い。

ただ、エラーやクラッシュしたアプリケーションが簡単に確認可能なため、カーネルパニックや予期せぬシャットダウンの原因がアプリケーションにあるのならDaiagnosticReportでエラーやクラッシュが発生しているアプリケーションをアンインストールするなどして問題を解決できる可能性がある。

ターミナルでシャットダウンコードを表示させる

コンソールやDiagnosticsReportを見ても有用な情報がない場合、ターミナルでシャットダウンコードを確認しよう。

シャットダウンコードを確認するには下記コマンドをターミナルで実行する。

log show --predicate 'eventMessage contains "Previous shutdown cause"' --last 24h

このコマンドによりカーネルパニック&予期せぬシャットダウンのシャットダウンコードを確認すること可能だ。

なお、コマンドの「last 24h」という部分は「24時間以内のカーネルパニック及び予期せぬシャットダウンを含む全てのシャットダウンコードを表示させる」という意味であるため、例えば1時間以内にカーネルパニックや予期せぬシャットダウンが発生したのなら「last 1h」など、好きな時間を指定して構わない。

コマンドを実行するとターミナル上に指定した時間内のシャットダウンコードが表示される。

画像では「-20」及び「1」というシャットダウンコードが確認できる。

とはいえシャットダウンコードがわかってもそれの意味するところがわからなければどうしようもないので、下記ブログ記事を参考にしよう。

参考 Previous Shutdown Causes Explainedgeorgegarsideblog

なお、上記ブログ記事は英語であるため下記表に日本語に翻訳したものを簡略化して掲載する。

ちなみに上記ブログ記事でもシャットダウンコードの全てを網羅しているわけではなく「Unknown(不明)」「Unverified(未検証)」という項目が多数ある他、今回の僕のシャットダウンコードは残念ながら掲載されていなかった。

シャットダウンコード原因
5正常なシャットダウン
3電源ボタンでの強制シャットダウン
0電源ケーブル切断
-3複数の温度センサーで上限値を超過
-60マスターディレクトリブロックでエラー
-61シャットダウン中に無反応なアプリケーションを検出
-62再起動中に無反応なアプリケーションを検出
-63不明
-64不明
-65不明
-71メモリモジュールの温度が上限値を超過
-74バッテリーの温度が上限値を超過
-75ACアダプターとの通信エラー
-78ACアダプターからの不正な値を検出
-79バッテリーからの不正な値を検出
-86近接センサーの温度が上限値を超過
-95CPUの温度が上限値を超過
-100電源ユニットの温度が上限値を超過
-102過電圧
-103バッテリーセルの電圧低下を検出
-104不明
-108未検証
-112未検証
-127PMU(Power Management Unit - 電源管理装置)の強制シャットダウン
-128不明

僕の場合は上記表にシャットダウンコードが掲載されていなかったため、少なくとも今回発生した問題の原因は依然として不明のままという結果になってしまったが、もし上記表に記載されているシャットダウンコードが表示されたのなら、上記表を目安に問題の解消を図ろう。

なお、経験上Appleサポートでは希望すればエンジニアリングチームに確認を取ってくれるため、Appleサポートを利用して先ほどのターミナルコマンドでのシャットダウンコードを伝えてエンジニアリングチームでの調査を依頼してもいいだろう。

sysdiagnoseを実行する

macOSの問題を把握する上で、ターミナルから実行できるシステム診断「sysdiagnose」を利用するのも手だ。

下記コマンドをターミナルで実行するとsysdiagnose(システム診断)が行われ、診断結果がデスクトップに出力される。

sudo sysdiagnose -f ~/Desktop/

なお、別のフォルダに診断結果を出力したい場合は「~/Desktop/」という部分を好みの場所に変更してもいい。

また、テンポラリーフォルダに出力したい場合は単純に下記コマンドを実行する。

sudo sysdiagnose

sysdiagnoseについては下記記事で解説しているので詳しく知りたい場合は参照して頂きたい。

Macの各種自己診断機能の実行方法とリファレンスコードまとめ

SMC・NVRAMのリセット

ターミナルで取得したシャットダウンコードが前述の表に掲載されておらず、相変わらず原因が不明な場合は下記の手順でSMC・NVRAMのリセットを試そう。

SMC・NVRAMのリセットについてはターミナルのコマンドを含めて下記記事で解説しているため参照して頂きたい。

NVRAM・SMCのリセットを確認する方法は?確実にNVRAM・SMCをリセットする手順

Apple Diagnosticsを起動する

MacにはApple Diagnosticsという自己診断が機能が搭載されており、Macの再起動・起動時にDキーを押しっぱなしにすることでハードウェアの自己診断が行われるため、ハードウェアに異常がないか一度チェックしよう。

特に前述のシャットダウンコードでハードウェア周りの異常を示すコードが表示されたのならApple Diagnosticsの実行を強くお勧めする。

Apple Diagnosticsについては下記記事で解説している。

Macの各種自己診断機能の実行方法とリファレンスコードまとめ

セーフモードで起動する

Macの再起動、もしくは起動時にShiftキーを押し続けてセーフモードでMacを起動し、しばらく使用するなどして現象が再現されるか確認してみよう。

セーフモードは必要最低限のアプリケーションしか読み込まれないため、セーフモードで問題が発生しないのであればアプリケーションに原因がある可能性が高い。

この場合は最近インストールしたアプリケーションをアンインストール、あるいは無効化してみよう。

macOSを上書きインストール

macOSは起動・再起動時にCommand+Rキーを押し続けることでリカバリーモードに入ることが可能であり、この画面から「macOSを再インストール」を選ぶとユーザーのデータを維持したままmacOSのシステムだけを上書きインストールすることが可能だ。

ここまでに紹介した対処法のいずれも効果がない場合、一度リカバリーモードからmacOSの上書きインストールを試してみよう

あくまで上書きインストールであるため、ユーザーがインストールしたアプリケーションやファイルが消えることはない。

macOS Catalinaの記事になるがmacOSの上書きインストール手順は下記記事で解説している。

不具合が生じたのでmacOS Catalinaを上書きインストールしてみた。引き継がれる設定、引き継がれない設定は?

まとめ

管理人は現在、SMC・NVRAMのリセット及びセーモードでの起動を実行し、また、エラーやクラッシュが頻繁に発生しているアプリケーション(管理人の環境ではCCleanerアプリケーションのエラーが著しかった)をアンインストールして様子を見ているところだが、”今のところは”カーネルパニックや予期せぬシャットダウンは発生していない。

僕の一連のカーネルパニックや予期せぬシャットダウンは「ファンが高速回転したまま元に戻らない」という現象をきっかけとして発生しており、コンソールでログを見ても「Power State」に問題が発生しているようだったのでSMC・NVRAMのリセットが最も効果があったのかもしれないが、冒頭でも書いた通り毎回発生するわけではないため確証はなく、これで問題が解決したのかも断言はできない。

カーネルパニックや予期せぬシャットダウン対処法の最後の手段はmacOSの上書き、あるいはクリーンインストールであるが、もし仮に問題が再発したとしても僕は7月にmacOS Big Surのパブリックベータをメインマシンにインストールするという暴挙に出る予定であり、どのみち僕のmacOSのシステムは滅茶苦茶になると予想しているため、上書き&クリーンインストールは行わずに乗り切るつもりだ。