apache がセマフォを使い切る

遭遇しない人は一生遭遇しないであろう症状

# httpd -X

とかやって apache を起動、終了を繰り返していると、そのうち、

[Mon Feb 09 17:54:50 2009] [crit] (28)No space left on device: mod_rewrite: could not create rewrite_log_lock
Configuration Failed

というメッセージをエラーログに吐いて、httpd が起動してすぐ終了してしまう(起動してない)という症状が出るようになる。

# ipcs -s

------ Semaphore Arrays --------
key        semid      owner      perms      nsems     
0x00000000 11272192   daemon    600        1         
0x00000000 11304961   daemon    600        1
...

と、延々100行以上表示される。セマフォが開放されていないのだ。(owner は環境によって異なる)

# apachectl start
# apachectl stop

を使用すると正しく開放される。apachectl の中でセマフォ面倒が見られてるということだ。なんで、通常は httpd を直接呼ぶようなことはしなければいい。


呼びたい場合は、以下のようなセマフォ開放シェルでも作っておいて、httpd が起動しなくなったら動かすってのがよさそう。ただし複数人で共有してるマシンでやるのは危険だが。

# cat /usr/local/apache2/bin/free_sem 
for i in `ipcs -s | grep daemon | awk '{print $2}'`; do ipcrm -s $i; done

■ 参考URL
http://blog.spytech.jp/200801/apache%e3%81%ae%e5%86%8d%e8%b5%b7%e5%8b%95%e3%82%92%e7%b9%b0%e3%82%8a%e8%bf%94%e3%81%99%e3%81%a8%e8%b5%b7%e5%8b%95%e3%81%97%e3%81%aa%e3%81%8f%e3%81%aa%e3%82%8b%e3%80%82/104.html