Monday, 31 May 2010

Как научить eAccelerator не работать c shm/sysvipc памятью, а переключить его на mmap

Имеем: 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 и, возможно, прекратит сваливать сервер.

2 comments:

  1. такая ошибка у меня возникает когда тестирую одним скриптом сервер
    тест мускула
    файловой системы
    и поиск по сайту

    вот когда начинает пробовать искать по страницам то валит сервер с такой ошибкой

    я уже разное пробовал и в файловой системе хранить кеш eaccelerator и размер менять

    все равно валит, но что примечательно после работы скрипта сайт сервер снова работает..

    я уж думаю может скрипт криворукий?
    сам главно работает а если во время его выполнения зайти на сайт то 500 error

    а потом сова нормально... что это..
    блин у меня паранойа :) Павел подскажи что-нибудь, пожалуйста.

    у меня vps на fastvps
    сам настраиваю
    сам хочу во всем разобраться

    м кстати на локалке на денвере
    ошибки такой нет но тоже на сайт трудно зайти..

    я понимаю что косяк в eaccelerator но без него не вариант да и ваще стоит ли обращать внимание на такой скрипт benchmark ?

    ReplyDelete
  2. ничего не понял, но хочется попробовать))
    можно как-то подробно написать пожалуйста.
    у меня уже установлен eaccelerator, нужно переустанавливать? или где то в конфингах можно прописать патч?

    ReplyDelete

Note: only a member of this blog may post a comment.