Information

日記

G-ZONEのメインコンテンツとは関係のない日々を綴ったX-Virusの日記です。メインコンテンツが更新されていない時、X-Virus が何をしているか、ここを読んでもらえれば分かるように・・・というより、自分が何をしようと目論んでいるかといった備忘録として使う予定です。

< 2012 / 10 >

1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31


最近の日記

MacOSでのsyslogd暴走の本当の原因と対策 2012-10-27

Macで作業中にマシンがハングアップ状態になってしまいました。ウンともスンとも言わなくなってしまったので、やむなく電源ボタンの長押しで強制的に終了。再起動後は問題なく使えたので、これで収束したと思いました。ところがその日以来、たびたびハングアップするようになってしまいました。

何が原因であるか調べているうちに、syslogdというシステムプロセスがCPUを100%占有。その上、時間とともにメモリをどんどん食いつぶしてしまうことが、ハングアップの直接的な原因だということが分かりました。

syslogdは自体を止めるのは、ターミナルから次のように入力すれば、止められます。

sudo launchctl stop com.apple.syslogd

スタートさせるには次のように入力すればできます。

sudo launchctl stop com.apple.syslogd

もっともsyslogdが暴走を始めると、ターミナルさえ開かないこともあるので気休めにもなりません。

syslogdというプロセスが何をしているプロセスなのかを調べてみると、色々なアプリケーションが吐き出すログをファイルとして記録することにあります。記録したファイルが大きくなると、圧縮したり整理したりと大活躍なデーモンプロセスなのです。

ネットで調べると、Macにおけるsyslogdの暴走について、色々と情報が載っています。asl.dbを削除しろと言うのが定説なようですが、本当にそうなのでしょうか。疑問が残りますが、あちらこちらに書かれているので、とりあえず試してみました。

sudo launchctl stop com.apple.syslogd
sudo rm /var/log/asl.db
sudo launchctl start com.apple.syslogd

しかし、効果はありませんでした。つまりasl.dbを削除しても状況が再発、解決できなかったのです。そもそも、asl.dbが存在しない状態でも、syslogdの暴走は起きることも分かりました。

もういちど、syslogdの動作について考えてみます。syslogdは、ログの記録や整理を行います。もしも、このとき大きなログファイルがあれば、整理して圧縮しようとするときに何か問題を起こすのかもしれません。asl.dbを削除しろと書いてあるページも、asl.dbが大きくなったのでAppleのサポートから削除を提案された云々と読み取れなくもありません。それならば、大きなログファイルを探して削除すれば良いのです。

Macのユーティリティフォルダにあるコンソールを起動し、どういった階層にログが記録されているか調べました。コンソール左側にログリストが表示されているようにして、項目化されているフォルダを右クリックして表示されるコンテキストメニューから、Finderで表示を選び、表示されたフォルダ内に容量の大きなファイルがあるか調べていきました。この間、syslogdが暴走すると厄介なので、先のコマンドを使って止めておきました。

するとどうでしょう。ありました。/private/var/logフォルダの中にあるdaily.outというファイルが800MB近くあります。daily.outは、毎日起動されるdailyスクリプトによって記録された、毎日のメンテナンス記録です。どうやらアップデートでOSを更新してきたので、相当昔の記録がそのまま残っていました。これは不要なので、思い切って削除することにします。とりあえずゴミ箱に入れて再起動してみました。

どうやらビンゴだったようです。

daily.outの場合は、クリーンインストールしても直らないことがある。クリーンインストールしても、MacOSの初回起動時に以前の設定をバックアップから引き継ぎすると、daily.outがコピーされるからです。クリーンインストールしても再びsysrogdが暴走するなら、daily.outに限らず引き継がれたログファイルの中に大きなログがあるに違いないと思います。

アップデータで暴走するのも、おそらくアップデータのせいではなく、アップデートによって何かしらのログファイルが肥大化したのが原因だと思います。この問題に遭遇すると、どうも本質的な所を見逃してしまいがちになり、場当たり的な解決になっているようですが、他の方のブログを読むと何かしらのログファイルが肥大化している事が、この問題の原因である事が分かります。

この問題のポイントは、巨大なログファイルを探し出して消すことにあります。今後も発生しないとも限らないので、メモとしてここに書き残しておきます。