eAccelerator トラブルシューティング – Can not create shared memory area in Unknown on line 0

Q. Linux + Apache + PHP + eAccelerator の環境で apache が次のエラーを出して動かなくなりました。

$tail -f error_log
PHP Warning: [eAccelerator] Can not create shared memory area in Unknown on line 0
PHP Fatal error: Unable to start eAccelerator module in Unknown on line 0
[Thu Feb 23 09:26:31 2006] [warn] pid file /usr/local/apache_1.3.34/logs/httpd.pid overwritten — Unclean shutdown of previous Apache run?
PHP Warning: [eAccelerator] Can not create shared memory area in Unknown on line 0
PHP Fatal error: Unable to start eAccelerator module in Unknown on line 0

A. このエラーが出た場合、原因はここの次の FAQ に書いてあるケースの可能性があります。

Q: I’m using linux 2.6 kernel and eAccelerator doesn’t get loaded when the shm_size is set to value bigger than 32mb. Php gives this warning:
PHP Warning: [eAccelerator] Can not create shared memory area in Unknown on line 0

A: The default shared memory size for the 2.6 kernel is 32mb. You can change this size by setting /proc/sys/kernel/shmmax to the disired maximum value. You can do this by echo VAL > /proc/sys/kernel/shmmax or add the line kernel.shmmax=VAL to /etc/sysctl.conf so you don’t have to set it manualy every time you reboot.

カーネルの共有メモリ制限(デフォルト32MB)を超えて、eaccelerator.shm_size を設定したのが原因でした。php.ini で

eaccelerator.shm_size=32

のように範囲内に押えるか、あるいは FAQ にあるように

# cat /proc/sys/kernel/shmmax
33554432

を、
# expr 64 “*” 1024 “*” 1024 > /proc/sys/kernel/shmmax
のように、バイト単位で適切に上限を設定してカーネルごとリブートすれば解決します。