Рубрика: FreeBSD, Хостинг Автор: Hottab :: Воскресенье 30 мая 2010 в 15:16

Проблема возникла в следующем.
После установки 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


4 комментариев »

  1. Comment от Alex-pt — 4 октября 2010 @ 10:01

    Самый простой способ для 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МБ

  2. Comment от Hottab — 4 октября 2010 @ 23:48

    не для всех версий
    на 6.2 - не получится..

  3. Comment от Sergej — 11 октября 2010 @ 18:25

    Если проделать то, что отписал Alex-pt, то объем можно задать и больше 128МБ. На VMware FreeBSD 8.0 так, на реальной системе пока не пробовал.
    Кстате, не понял где взять параметры SHMMAXPGS и PAGE_SIZE ?

  4. Comment от Hottab — 11 октября 2010 @ 22:22

    Можно, но на новых версиях.
    PAGE_SIZE - по умолчанию для i386 - 4Kb
    SHMMAXPGS - вычисляется исходя из формулы ( так чтобы получилось нужное значение SHMMAX ).

Оставить комментарий

CAPTCHA изображение Аудио версия
Перезагрузить изображение

Copyright © 2009 Горячий [TAB].