httpd(Apache)が立ち上がらない時のまとめ
まずは確認のコマンド達 ( root で実行してます )
A.親プロセス確認
ps aux | grep httpd | grep Ss
とか
A’.親プロセスID直確認
cat /var/run/httpd.pid
B. 子プロセス確認
ps aux | grep httpd | grep -v Ss |grep -v grep
上記をふまえて。
1.がっつりこけちゃう、でもアクセスしたら閲覧できちゃう
/etc/init.d/httpd restart
とかしても
/etc/init.d/httpd restart
Stopping httpd: [FAILED]
Starting httpd: (98)Address already in use: make_sock: could not bind to address [::]:80
(98)Address already in use: make_sock: could not bind to address 0.0.0.0:80
no listening sockets available, shutting down
Unable to open logs
[FAILED]
こけちゃう場合。
親プロセスは死んでるけど子プロセスが生きているため。
ちなみに、/etc/init.d/httpd status とすると
httpd is stopped
となるのに、B. を実行すると
apache 14869 0.0 0.3 275980 7316 ? S 03:29 0:00 /usr/sbin/httpd
apache 14871 0.0 0.3 275980 7312 ? S 03:29 0:00 /usr/sbin/httpd
apache 14872 0.0 0.3 275980 7312 ? S 03:29 0:00 /usr/sbin/httpd
apache 14873 0.0 0.3 275980 7312 ? S 03:29 0:00 /usr/sbin/httpd
apache 14874 0.0 0.3 275980 7312 ? S 03:29 0:00 /usr/sbin/httpd
apache 14875 0.0 0.3 275980 7312 ? S 03:29 0:00 /usr/sbin/httpd
apache 14876 0.0 0.3 275980 7312 ? S 03:29 0:00 /usr/sbin/httpd
apache 14877 0.0 0.3 275980 7312 ? S 03:29 0:00 /usr/sbin/httpd
にょろーんと出てくる。
なーので実際にアクセスしてみると、待ち受けてくれてる。死に体で出迎えてくれる。
両親はもうとっくにいないのに、健気である。
これは実に厄介で僕の知ってる監視プログラムだと検知しない(待ち受けてるし実際しばらくは処理出来るため)
それでもやっぱり正常起動ってわけではないので時間がくれば必ず落ちる。ストンなのでとても困る。
ということでこんな症状に気づいた場合は子プロセスを奇麗に殺してください。
(それ以外の奇麗に安全な方法ってあるのかなあ? DBの整合性とか気になるんだなあ)
2.restart できちゃってる風、でも全然出来てない
/etc/init.d/httpd restart は
Stopping httpd: [FAILED]
Starting httpd: [ OK ]
成功するのに、
/etc/init.d/httpd status で、
httpd dead but subsys locked
と表示されるにょろーんな場合。
(ちなみに僕の経験ではこの事象が起きてる際には /var/run/httpd.pid は存在しないです)
これはもう完全に落ちていて、
A. も A’.(先述通りpidファイルない) も B. も全てけんもほろろである。
これはセマフォっていう仕組みが問題になっているようです。
ipcs -s を実行して見ると、apache 行が山盛りになってます。
実際に行数をカウントしてみると、
ipcs -s|grep -c apache
126
という感じでした。再起動し過ぎ。ふざけ過ぎ。
以下を参照。エントリ最下段にセマフォ開放ワンライナーあり。
kameid さん、どうもありがとうございます。これなかったら今日はやばかったです。
apache がセマフォを使い切る – kameidの備忘録 – Sharpen the Saw!
そしたら restart できるよ。

コメントって改行できるのかな? said:
7月 05, 10 at 4:47 AM> 時間がくれば必ず落ちる。
ノー ちがいます。 時間ではありません。
httpdの子プロセスはMaxRequestsPerChildディレクティブに設定された回数分の処理を行って自滅します
CentOS標準のApache2.2をお使いなら MaxRequestsPerChildは 4000 もしくは0という値が設定されているでしょう。
$ grep MaxRequestsPerChild /etc/httpd/conf/httpd.conf | grep -v ^#
MaxRequestsPerChild 4000
MaxRequestsPerChild 0
これは、httpd.conf全体をみればわかりますが
Server MPM: Preforkの時 MaxRequestsPerChild 4000
Server MPM: Wokerの時: MaxRequestsPerChild 0
という意味です。
自分がどちらのMPMを使っているか知りたい場合は
$ /usr/sbin/httpd -V | grep “Server MPM”
で確認しましょう。
そしてセマフォが枯渇することが分かっているのなら泥縄的対処ではなくはじめから多めに確保すればいいんじゃないでしょうか?
# sysctl -a | grep kernel.sem
kernel.sem = 250 32000 32 128
SEMOPMとSEMMNIの値を増やしたいなら
(1) /proc/sys/kernel/sem 以下に直接値を叩き込む方法
# echo “250 32000 128 1024″ > /proc/sys/kernel/sem
(2) 恒久的に設定したいなら
#vi /etc/sysctl.cof
1行追加
kernel.sem = 250 32000 128 1024
#sycctl -p
詳しくは RedHatの公式ドキュメント
http://www.redhat.com/docs/manuals/enterprise/RHELTuningandOptimizationforOracleV11.pdf
19ページ Setting Semaphoresを参照してくださいね
日本語でかいつまんで説明しているドキュメントは ココ
http://www.oracle.co.jp/2shin/no86/o35linux.html
ngsw said:
7月 05, 10 at 11:19 AM有益な情報ありがとうございます!
後ほど実機で確認して再まとめしたいと思います。
# watch -d tail /var/log/ngsw.log» Blog Archive » apacheの正しい再起動 said:
7月 10, 10 at 6:15 PM[...] 以前まとめました、 httpd(Apache)が立ち上がらない時のまとめ にとても有益なコメントをコメントって改行できるのかな?さんより頂きました。 (名前は本意ではないかもしれませんが、 [...]