要約
mdsが暴走してMacの空きメモリがどんどん食われていく事案に遭遇して、とりあえず解決したので記録します。
発端
事件が起こったのは昨日(日曜)の夜。外出から戻ってきてMacBookの蓋を開いたらひどいことになった。
秒速100MBオーダーで空きメモリ(緑)が現在非使用中(青)に食われていく最悪っぽい状態になってる
— Julius/HP (@ast_j) 2013, 10月 20
最悪っぽい http://t.co/3Wwt4THJBp
— Julius/HP (@ast_j) 2013, 10月 20
空きが1GBくらいのタイミングまでにsudo purgeしないとさっきのスクショの段階までいくとアプリの切り替えもままならなくなる どっかのプロセスがお行儀悪いメモリの使い方してるとかいうレベルではないと思うんだけどなんだこれ
— Julius/HP (@ast_j) 2013, 10月 20
ツイート引用にも書いたけど、空きメモリがすごいスピードで"非使用中"に食われていく。アクティビティモニタでプロセスリストを見るだけじゃ何が怪しいのかわからない。 1分に1度くらいの感覚でsudo purgeし続けて空きメモリを残さないと何もかもままらない。
……とまぁ、最悪な感じになりました。
ログを読む
とりあえず立ち上げていたアプリを順番に閉じてみたもののこの惨状は変わらず、どーしたものかと思いながらConsole.appでログを見ると、
13/10/20 23:50:57.828 mdworker32: (Error) Import: Couldn't find bundle identifier for /Users/僕です/.Trash/BathyScaphe.app/Contents/Library/Spotlight/BathyScaphe.mdimporter 13/10/20 23:50:59.213 mdworker: (Error) Import: Couldn't find bundle identifier for /Users/僕です/.Trash/BathyScaphe.app/Contents/Library/Spotlight/BathyScaphe.mdimporter
(バージョンアップ時にゴミ箱に捨てた古い)BathyScaphe.appの中にあるmdimporterの読み込みに失敗してなんかヒィヒィ言っているっぽいことが発覚した。
とりあえず対処
BathyScaphe.appを削除すれば良いんだな!(錯乱)という気概になったので、ゴミ箱を空にした。
するとこの異常な事象は収束して、10秒間じっとアクティビティモニタを眺めても青ゲージは特に増えないという幸福な日常を手にすることができた。
一体なんだったのか
バチスカ.appをゴミ箱に捨てた後ゴミ箱を空にするときにバチスカの中身を大体消した後mdimporterが使用中だったから削除できなくて壊れたimporterがゴミ箱に残って、んで何かのタイミングでそのimporterを使おうとして失敗失敗アンド失敗でメモリ食いつぶしてたっぽい
— Julius/HP (@ast_j) 2013, 10月 20
ゴミ箱にあったBathyScaphe.appについて思いを馳せたところ、多分こういう経緯を辿った物体だったと思う。
- アップデートのため古いBathyScaphe.appをゴミ箱に捨てた
- その後一度
ゴミ箱を空にする
を実行したら、(mdimporterが?)まだ使用中だったから中途半端に削除された - 結果として、(Bundle Identifierのない)壊れたmdimporterが残った状態になってしまった
- 何かの拍子にmdsがこのimporterを使って索引を作ろうとして、結果おかしなことになった
- その後もう一度
ゴミ箱を空にする
を実行したら今度はBathyScaphe.appがまるまる削除されたので、事態が収束した
この件、結局誰が悪かったのかというと、多分一番悪いのはmdimporterがぶっ壊れた程度で秒速100MBの勢いでメモリの緑ゾーンを青に食い尽くすmdsだかその辺なんだと思うけど、仮にこれが割と再現性ある挙動だとしたら(確かめてない)、アップデート時にゴミ箱に捨てるSparkle.framework使ってて、かつ自前でmdimporterを持ってるアプリはみんなこの事態が発生する危険性を秘めてることになるのかもしれない。調べてないからどんどんよく分からなくなってきた。
なんか前から時々mds周りで似たような感じの異様な目に遭ったことがあってずっと憎んでたんだけどこれかもしれない
— Julius/HP (@ast_j) 2013, 10月 20
結論
メモリは多ければ多いほど幸せになれるけど、例え16GB積んでても何かあるとすぐ埋まって死ぬ