rcmdnk's blog

作りながら学ぶOSカーネル―保護モードプログラミングの基本と実践

最近たまにMacが物凄く遅くなることがあって、 よくみてみると、 GeekTool で表示させてるモニタで毎回必ずkernel_taskというものが 400%(全CPUフル)使ってました。

かなりの頻度でなるようになってきたのでなんとかしてみようと。

自分の環境でなる場面

kernel_taskが暴走してたのは、バッテリーで動かしていて 完全に切れた後に、電源につないで復活させた時が主でした。

おそらく色々と回復をするための作業をしてるのでしょうが、 そもそも、最初の頃はバッテリーは8時間くらい持ってた訳で、 デスク以外で作業していても途中で電源が切れるなんて事はありませんでした。

なので、単純にOSにゴミが溜まってきた、というよりも、 バッテリーが切れるまで使い切って突然電源が切れる、と言った事を繰り返してたのが 一番悪いのかもしれません(確信があるわけではありませんが)。

いずれにしろ、一度電源が切れた後に回復時に最初に物凄くCPU使うことはあって、 それが徐々に長くなってきて、最近では全く収まらずに強制再起動とかまでするように。 (更にこれで悪くなったかも。)

いずれにしろ、対処しないと支障をきたす様な状態でした。 (最悪再インストールすることも考えて)

ACPI_SMC_PlatformPlugin.kextの削除

対処法は以下に書いてあることを参考に行いました。

“Fixing” kernel_task CPU Problems in MacOS 10.7/10.rdoxenham.com: http://www.rdoxenham.com/?p=259&cpage=2

コメントの方で、バッテリーが切れた時にこれが起こった、という人が居るので、 やはりその時に起こりやすいのかも知れません。

やることは、まず

$ system_profiler -detailLevel mini | grep "Model Identifier:"
Model Identifier: MacBookAir4,2

として、使っているMacのModel IDを調べます。 このマックではMacBookAir4,2 (OSはMac OSX 10.9.1)。

次に、

/System/Library/Extensions/IOPlatformPluginFamily.kext/Contents/PlugIns/ACPI_SMC_PlatformPlugin.kext/Contents/Resources

のディレクトリへ行きます、上のIDに対応するplistファイルを探します。

MacBookAir4_2.plist

と言ったファイルがあるはず。 このファイルを削除して再起動すると治ります。

ただし、Systemのコアなファイルなので、自己責任で。

一応、削除するのではなく、どこかに取っておいた方が良いかと。 root権限で

$ cd /System/Library/Extensions/IOPlatformPluginFamily.kext/Contents/PlugIns/ACPI_SMC_PlatformPlugin.kext/Contents/Resources
$ sudo mv MacBookAir4_2.plist ~/Documents/

物によっては上のACPI_SMC_PlatformPlugin.kextのディレクトリ削除せよ、 と言ったものもありましたが、取り敢えずこの該当ファイルだけでも 変わるようなので最小限の変更で。

このファイルを少し見て見ると、中には FanThrottledRPMFanMaxなどのファンに関する設定、 スリープ等電源周りの設定等が入っていました。

下の方にNormalBackgroundRealTimeと言ったキーに 大量の文字列がdataとして与えられてましたが、 大きく変更されそうだとするとこの値くらいだと思うんですが、 結局何を意味するのか分かりませんでした。

削除後、再起動して暫く使ってみて、同じように電源が切れる場面が何度かありましたが、 今のところkernel_taskの暴走は出ていません。 (以前は最後の方は必ずと言って良いほど出てたので確実に回復してます)

ACPI_SMC_PlatformPlugin.kext/Contents/Resourcesのディレクトリを覗いて見ると MacBookAir4_2.plistが復活してるわけではなくファイル不在のまま動いています。 (デフォルト値が他にある?ならば4.2の時との違いは。。。?)

まとめ

という訳で、取り敢えず上の様にACPI_SMC_PLATFORMPLUGIN下にある 自分のマシンIDのplistを削除するとkernel_taskの暴走は治まります。

ただし、システムファイルなので慎重に。 同しようもない時に、最悪再インストールするか、と思うくらいならやった方が良いです。

後は、バッテリーが切れる様になって来たら、 バッテリーが切れる様な状態まで電源なしで使うことを極力避けた方が良いのかもしれません。

Sponsored Links
Sponsored Links

« Git 1.9.0リリース 表示中のページのはてなブックマークページを開くブックマークレット »

}