MacでApache HTTPサーバーが落ちる原因がわかった!

はじめに

今回の紹介する事例は非常に特殊で、

  1. MacでWebサーバー(今回はRailsアプリ)を構築する。
  2. MacにApple純正Server.appをインストールしている。
  3. CUIに慣れていてApacheの起動をコマンドラインでやる。

という特殊な環境に置かれた人向け記事なので、当てはまらない人は時間の無駄なので読み飛ばしてください(・∀・)

僕はRailsウェブアプリを開発中なのですが、まずそのhttpサービスにメジャーなApacheを選択。そんなこんなでCUIをある程度触れる人だったら、Apacheの起動、自動起動設定なんかもコマンドラインでやると思う。僕もその一人なんだが、今回、Apacheが不定期で落ちるということにハマった!!!結論から言うとApple純正のServerアプリにTerminateされてたんですけどね。

2週間近くも悩んだw

そんなこんなで今回、その原因究明に至った経緯、並びにその解決法を記そうと思う。

今回、書き記すのは以下の通り。

  1. システムログに見つけたSTOPの文字
  2. Apple純正Server.appのアンインストール
  3. Apacheの自動起動設定

今回の環境

Apacheのエラーログだけじゃない!システムログに見つけたSTOPPEDの文字

結論から言うとシステムログにも目を通せ!ということ。今回、Apacheが不定期で落ちるということで、ひたすらにApacheのエラーログ、アクセスログとにらめっこをしていた。

/var/log/apache2/error_log

二行目のmpm_prefork:noticeの文字と、三行目のGracefully shutting downにやられた。完全にmpm_preforkのせい、つまりシステムにガッツリ負荷がかかって落ちてるんだと勘違いした。そして結果的に2週間弱にも及ぶ負荷分散のチューニングに取り掛かる。そもそもmpm_preforkじゃキツくて、mpm_workerに変えてみるなど色々やってみた!

にもかかわらず落ちる。
さぁ、もうここで半泣き状態。

そこでそもそも今までほとんど目を通したことのない(実際にはまーまーあるが今回は初めて)、システムログに目を向けてみた。すると何やら怪しげなSTOPPEDの6文字。そしてその命令を下していそうなのがservermgr_devicemgrという僕にとって初見のプロセス。

あんた誰!?状態w

/var/log/system.log

ちょちょっとググってみたらどうやらApple純正Server.appが関与しているみたい。もうなんかアプリで自動設定されてる細かいのややこしーてかなんわ…って思ったのでServer.appをアンインストールすることを決意。

Apple純正Server.appのアンインストール

ガッツリこちらを参考にさせてもらいました!すごく助かりました。

OS X Server.app (Yosemite) を Uninstall して元のYosemite の Apache2 の設定に戻す方法

こちらに記載されているのを、僕が忘れないためにもう一度さらうと、作業の流れは以下のとおり。

  1. Server.appの全サービスを「切」に。
  2. コマンドでServer.appのWebサービスの設定をdefaultに戻す。
  3. Server.appを削除。
  4. Server.appのライブラリを削除。
  5. Macの再起動。

では補足が必要そうなところだけ詳記する。

コマンドでServer.appのWebサービスの設定をdefaultに戻す。

このコマンドでいけるらしいです。ってかいけましたw serveradminをサーバーを立ててる管理者権限を持つユーザー名とかではなく、そのままserveradminで大丈夫です。

Server.appを削除。

普通に/Applications/ディレクトリからrmで吹っ飛ばしてください!
AppCleaner(無料)とかあれば次のライブラリの削除なんかもまとめて一掃できたかも。

Server.appのライブラリを削除。

下記ファイル、ディレクトリをrmコマンドで一掃。/Library/Serverなんかはまーまーなサイズがあるかもです。なんか時間かかってました(サイズは未確認なのでわかりませんw)。

  • /Library/Preferences/com.apple.serverd.plist
  • /Library/Preferences/com.apple.servermgr_*.plist
  • /Library/Preferences/com.apple.servermgrd.plist
  • /Library/PrivilegedHelperTools/com.apple.serverd
  • /Library/Server (ディレクトリごと全部)

とまぁこんな感じです。

Apacheの自動起動設定

これまでの作業でApacheを勝手に落とす極悪アプリを退治したってことで、Apacheの自動起動設定。

よーするにシステム起動時に/System/Library/LaunchDaemons/org.apache.httpd.plistを読み込むよう設定している。軽く解説するとLaunchDaemonsの他にLaunchAgentsもあるが、LaunchAgentsはユーザーがログイン時、LaunchDaemonsはシステム起動時に読み込まれる。やった気がするw

これで自動起動設定は終わり。一応Apacheも起動させておく。

これで落ちなくなった!本当に良かった!

Server.appに色々任せて自動でやってよ…

って考えが甘かったです。やっぱりコマンドラインでカチャカチャカチャカチャとキーボードを叩きまくって作業する方が楽しいですね。

では!

参考