Имеем: eAccelerator + shm валит сервер с ошибками:
eAccelerator: shmmax should be at least 2MBPHP 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
eAccelerator: Could not allocate 33554432 bytes, the maximum size the kernel allows is 1048576 bytes. Lower the amount of memory request or increase the limit in /proc/sys/kernel/shmmax.
При его сборке есть следующее:
checking for sysvipc shared memory support... yes
checking for mmap shared memory support... yes
checking for mmap on /dev/zero shared memory support... yes
checking for anonymous mmap shared memory support... yes
checking for posix mmap shared memory support... no
checking for best shared memory type... sysvipc
То есть, есть выбор между различными хранилищами, так как мой баг явно связан с sysvipc / shm, то логично будет его заменить на... на кого? В коде posix map явно указан как NOT TESTED, так что он отпадает.
Далее в configure можно найти кой что интересное:
5365 echo $ECHO_N "checking for best shared memory type... $ECHO_C" >&6; }
5366 if test "$mm_shm_ipc" = "yes"; then
5367
5368 cat >>confdefs.h <<\_ACEOF
5369 #define MM_SHM_IPC 1
5370 _ACEOF
5371
5372 msg="sysvipc"
5373 elif test "$mm_shm_mmap_anon" = "yes"; then
5374
5375 cat >>confdefs.h <<\_ACEOF
5376 #define MM_SHM_MMAP_ANON 1
5377 _ACEOF
5378
5379 msg="anonymous mmap"
Отсюда следует, что shm_mmap_anon (он же MM_SHM_MMAP_ANON) следующий в списке предпочтений.
Так что делаем следующее:
vi configure
Накатываем патч:
- 5366 if test "$mm_shm_ipc" = "yes"; then
+ 5366 if false; then
Потом перезапускаем configure и получаем все, как надо:
checking for sysvipc shared memory support... yes
checking for mmap shared memory support... yes
checking for mmap on /dev/zero shared memory support... yes
checking for anonymous mmap shared memory support... yes
checking for posix mmap shared memory support... no
checking for best shared memory type... anonymous mmap
То есть, теперь он будет собран с anonymous_mmap и, возможно, прекратит сваливать сервер.