Sunday, October 02, 2011

Apacheが4:02にSegmentation Faultを吐く

数ヶ月に1回くらいの頻度ですが、Apacheのプロセスが4:02にSegmentation Faultを吐くことがありました。
CentOSの上で走らせているんですが、静的なファイルへのアクセスは問題なく、phpを動かすとSegmentation Faultを吐く。

yum-updatesdがパッケージを更新して何かおかしくなってる?と以前は考えてみたりもしましたが、
現在はyum-updatesdを使っていないのでその可能性は考えにくい。

前回発生したときには原因を特定できてなかったので、これは困ったな…
と思っていたら、下記URLに記載の内容が現在とドンピシャ。

http://thinkit.co.jp/article/736/1?page=0,1

Apacheのログに「SIGHUP」の文字列が残っていたので、
それらのワードをヒントに検索したらヒット。
前回は探し方がまずかったようですね。

要はSIGHUPを発行するとSegmentation Fault出しちゃうPHP Extensionが居ると。
誰だそいつは!ってそこまでは特定できていないのですが…

とかく対策としては、

・ログのローテートにSIGHUPを発行しないApache付属のrotatelogsを使う
・SIGHUPを発行しないようにlogrotateの設定を変更する

と書かれています。

二つ目の方法を採用する場合、kill -HUPではなくservice httpd restartとかを実行すればいいのかな。
/etc/logrotate.d/httpdに記述されているreloadをrestartに変更すればよさげですね。
/etc/init.d/httpdに記述されているreloadの定義を見てみると、SIGHUPを発行するようになっていました。

SIGHUPをApacheに送って症状の再現を行い、上記の対策を施して、再度症状の再現を試みてみますか。
で、再現しようとしてみたのですが、発行しまくっても再現できず。
仕方ないのでまたしばらく様子見ですね。

No comments: