Apacheが"Couldn't create accept lock"で起動しない場合の対処方法

·2 分で読めます

これの続編なのですが、複数人が共同で使っているサーバなどで、Apacheのプロセスを何個も起動していると、使えるセマフォがなくなるという事態に遭遇することがあります。対処方法は、Apacheを止めるか

$ for semid in `ipcs -s | grep www-data | cut -f2 -d" "`; do ipcrm -s $semid; done

としてセマフォを削除すれば解決しますが、どうしてもたくさんのApacheのプロセスを立ち上げたい場合は、kernelパラメータのkernel.semの値を大きくしてみると良いでしょう。

Ubuntu 9.04 Server版の kernel.sem のデフォルト値は

$ cat /proc/sys/kernel/sem

250 32000 32 128

となっていて、この4つの数値は左から

  • SEMMSL: セマフォ集合ごとのセマフォ数の最大値。

  • SEMMNS: システム全体での、全てのセマフォ集合におけるセマフォ数の制限。

  • SEMOPM: semop(2)コールに指定されるオペレーション数の最大値。

  • SEMMNIシステム全体でのセマフォ識別子の最大値。

というものらしいです。

今回はためしにこの4つの数値を倍に設定してみましょう。設定するには /etc/sysctl.conf に以下の行を追加します。

kernel.sem = 500 64000 64 256

完了したら

$ sudo sysctl -p

を実行するとすぐに反映されます。これでApacheが意味不明な"Couldn't create accept lock"というエラーを吐かなくなるはずです。