Проблема возникла в следующем.
После установки eAccelerator на FreeBSD 6.2 некоторые php-скрипты (в частности bitrix) стали выдавать ошибку:
PHP Fatal error: Out of memory (allocated 13369344) (tried to allocate 3145968 bytes) ...
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
Решение вопроса простое - уменьшаем значение параметра “eaccelerator.shm_size”
Он был установлен в 128 Мб. Меняем значение на 32 (в моем случае) и все работает ![]()
Причина проблемы - в FreeBSD максимальный размер совместно используемой (shared) памяти не задается напрямую, и следовательно, его нельзя просто увеличить (как, например, в линуксе, увеличил параметр SHMMAX).
Значение SHMMAX вычисляется из параметров SHMMAXPGS и PGSIZE, по формуле :
SHMMAX=”(SHMMAXPGS*PAGE_SIZE+1)”
Посмотреть текущее значение параметра SHMMAX на Вашей системе можно используя команду ipcs.
serv# ipcs -M
shminfo:
shmmax: 33554432 (max shared memory segment size)
shmmin: 1 (min shared memory segment size)
shmmni: 192 (max number of shared memory identifiers)
shmseg: 128 (max shared memory segments per process)
shmall: 8192 (max amount of shared memory in pages)
Вывод: параметр eaccelerator.shm_size в файле php.ini не должен превышать параметр SHMMAX Вашей ОС.
P.s. Если очень нужно, то изменить параметр SHMMAX можно задав нужные опции в конфиге ядра (options SHMMAXPGS). Чуть подробнее - в мане, http://www.freebsd.org/doc/ru/books/handbook/book.html , пункт 10.6.3.1. Настройка ядра.
P.P.s. Для линукса все проще ![]()
Добавляем в /etc/sysctl.conf строку:
echo “kernel.shmmax=33554432″ >> /etc/sysctl.conf
и меняем значения на лету:
echo “33554432″ > /proc/sys/kernel/shmmax
Самый простой способ для FreeBSD:
ee /boot/loader.conf
kern.ipc.semmni=256
kern.ipc.semmns=512
kern.ipc.semmnu=256
ee /etc/sysctl.conf
kern.ipc.shmall=32768
kern.ipc.shmmax=134217728
kern.ipc.semmap=256
После перезагрузки shmmax станет 128МБ
не для всех версий
на 6.2 - не получится..
Если проделать то, что отписал Alex-pt, то объем можно задать и больше 128МБ. На VMware FreeBSD 8.0 так, на реальной системе пока не пробовал.
Кстате, не понял где взять параметры SHMMAXPGS и PAGE_SIZE ?
Можно, но на новых версиях.
PAGE_SIZE - по умолчанию для i386 - 4Kb
SHMMAXPGS - вычисляется исходя из формулы ( так чтобы получилось нужное значение SHMMAX ).