FastNetMon

Sunday 3 January 2010

Установка eAccelerator на Debian 5 Lenny для PHP в FastCgi режиме

На офсайте говорится "eAccelerator only works with mod_php or php in fastcgi mode. It can't be used in cgi or cli because eAccelerator needs to set up shared memory, and this can only be done when all php instances that need to access it are forks of the first process".

Что по-русски означает, что eAccelerator работает только, если PHP подключен как модуль Апача либо как FastCGI.

Будем ставить версию 0.9.6.1

Ставим все необходимое для сборки:

apt-get install -y php5-dev bzip2 make


Компилируем:


cd /usr/src
wget http://bart.eaccelerator.net/source/0.9.6.1/eaccelerator-0.9.6.1.tar.bz2
tar -xf eaccelerator-0.9.6.1.tar.bz2
cd eaccelerator-0.9.6.1
phpize
./configure
make install


Очищаем систему после сборки
apt-get remove php5-dev
cd
rm -rf /usr/src/eaccelerator-0.9.6.1
rm -f /usr/src/eaccelerator-0.9.6.1.tar.bz2


Кстати, крайне рекомендую обратить внимание на файлик control.php в дистрибутиве, который предназначен для управления и мониторинга eAccelerator :) (спасибо Котеровским наблам, где это упомянуто)

--prefix тут, к сожалению, не работает, т.к. configure берет путь до библиотек из:

php-config --extension-dir
/usr/lib/php5/20060613



Создаем конфиг файл:

vi /etc/php5/conf.d/eaccelerator.ini


Вариантов подключения к PHP два - Zend Extension и обычное расширение, мне почему-то второй больше импонирует.

Вот стандартный конфиг:

extension="eaccelerator.so"
# eaccelerator.shm_size="16" # иначе получите проблемы на своем VPS
eaccelerator.cache_dir="/tmp/eaccelerator"
eaccelerator.enable="1"
eaccelerator.optimizer="1"
eaccelerator.check_mtime="1"
eaccelerator.debug="0"
eaccelerator.filter=""
eaccelerator.shm_max="0"
eaccelerator.shm_ttl="0"
eaccelerator.shm_prune_period="0"
eaccelerator.shm_only="0"
eaccelerator.compress="1"
eaccelerator.compress_level="9"


А вот мой оптимизированный:

extension="eaccelerator.so"
; размер shm памяти в мегабайтах
eaccelerator.shm_size="32"
eaccelerator.cache_dir="/tmp/eaccelerator"
eaccelerator.enable="1"
eaccelerator.optimizer="1"
eaccelerator.check_mtime="1"
eaccelerator.debug="0"
eaccelerator.filter=""
eaccelerator.shm_max="0"
eaccelerator.shm_ttl="0"
eaccelerator.shm_prune_period="0"
; памяти у нас много, будем кэшировать в ней
eaccelerator.shm_only="1"
; рекомендую отлючить
eaccelerator.compress="0"
eaccelerator.compress_level="9"


Создаем папки для кэша (тут, как понимаете, будут проблемы с FastCGI, т.к. в нем скрипты работают от имени юзеров, а не от имени Апача, как это победить - я хз пока что). Кстати, в случае SHM памяти все будет очень безопасно по причине, что shm блоки будут создаваться от имени пользователя, от которого запускается скрипт. Так что самый лучший вариант в случае FastCGI - отключение файлового кэша и расположение скомпилированного кода только в shm.

Это в случае использования только shm не требуется:

mkdir /tmp/eaccelerator
chmod 0777 /tmp/eaccelerator


А испытать работоспособность можно командой:

php -m | grep eAcc
eAccelerator


И, наконец, перезапускаем Апача:

/etc/init.d/apache2 restart


Также в результате может сломаться phpmyadmin, фиксить его так: http://phpsuxx.blogspot.com/2009/11/g-phpmyadmin.html

Основано на: http://www.eaccelerator.net/wiki/InstallFromSource

Обращаю внимание, в мане баг! В Дебияне /tmp/eaccelerator будет удалена при ребуте.

Также обращаю внимание, что при устанвоке размера памяти SHM более 32 бегабайт возможен облом в виде:
eAccelerator: Could not allocate 67108864 bytes, the maximum size the kernel allows is 33554432 bytes. Lower the amount of memory request or increase the limit in /proc/sys/kernel/shmmax.

Это, конечно, тоже фиксится, но нужно немного подтюнить ядро :)

15 comments :

  1. А prefix при сборке PHP на директорию с модулями и не влияет. Проще всего после configure в ходе сборки основного бинаря отредактировать scripts/php-config задав нужный extension_dir (он там в районе десятой строки). А потом при configure используем with-php-config=путь_до_php-config. И все, после make install модуль встанет в указанную диру.

    По поводу кэша. Стики бит не? Опять же в контексте фаста есть php-fpm (да, да, да, студенческая поделка, то да сё... лесом, лееесом; ибо работает и гуд!) которые позволяет задавать свои настройки для юзера, опять же в 5.3 user php.ini еще ни кто не отменял.

    ReplyDelete
  2. Ну у меня не самособорка же, стандартный дебовский ПХП :)

    ReplyDelete
  3. "Также обращаю внимание, что при устанвоке размера памяти SHM более 32 бегабайт возможен облом в виде"

    Паш, это не когда более 32 мегабайт, а когда более числа, указанного в /proc/sys/kernel/shmmax

    ReplyDelete
  4. А там и указано 32 мегабайта.

    ReplyDelete
  5. До 64 спокойно подкручивается.
    я у себя до 64 крутил.
    http://dragonflybsd.blogspot.com/2010/10/php.html

    kern.ipc.shmall=65536
    kern.ipc.shmmax=268435456
    Это во фре, в лине как-то аналогично будет.

    ReplyDelete
  6. Ну это да, никто не спорит, на лично точно также - нужно лишь ядро подтюнивать :)

    ReplyDelete
  7. Чтобы все в одном месте было:
    для CentOS нужно делать тоже самое, только вместо шага:
    apt-get install -y php5-dev bzip2 make
    сделать:
    yum install php-devel
    yum groupinstall 'Development Tools'

    ReplyDelete
  8. Паш, пожалуйста, поправь путь к кэшу на /var/cache/eaccelerator:

    "Это в случае использования только shm не требуется:

    mkdir /tmp/eaccelerator
    chmod 0777 /tmp/eaccelerator"

    И в конфиге тоже соответственно.

    ReplyDelete
  9. Здравствуйте,

    Возникла проблема с установкой eAccelerator 0.9.6.1 на Debian Lenny
    Скачал исходники, распаковал, вошел в распакованную папку, ввожу команду "phpize" и мне выдается вот это:

    server:/tmp/eaccelerator-0.9.6.1# phpize
    Configuring for:
    PHP Api Version: 20041225
    Zend Module Api No: 20060613
    Zend Extension Api No: 220060519
    cp: cannot stat `libtool.m4': No such file or directory
    cp: cannot stat `ltmain.sh': No such file or directory
    cat: ./build/libtool.m4: No such file or directory
    configure.in:8: warning: LT_AC_PROG_SED is m4_require'd but not m4_defun'd
    aclocal.m4:2634: PHP_CONFIG_NICE is expanded from...
    configure.in:8: the top level
    configure.in:151: error: possibly undefined macro: AC_PROG_LIBTOOL
    If this token and others are legitimate, please use m4_pattern_allow.
    See the Autoconf documentation.
    configure:1894: error: possibly undefined macro: LT_AC_PROG_SED

    Пакет php5-dev у меня стоит, к сожалению своими силами разобраться не получается... Надеюсь на вашу помощь.

    ReplyDelete
  10. PHP не из штатного репозитария, а из репозитария Dotdeb.
    Проблема решилась, выяснилось что у меня не стоял пакет "libltdl3-dev", и а у пакета "libtool" почему то не хватало несколько папок с файлами, наверно ранее он был установлен не корректно.
    В итоге после этих манипуляций все заработало:
    apt-get install libltdl3-dev
    apt-get remove libtool (так же удалился и php5-dev)
    apt-get install libtool
    apt-get install php5-dev

    Теперь все в полном порядке.

    ReplyDelete
  11. Подскажи, как быть тогда с /tmp

    чтоб не удаляло папку при перезагрузке сервера?

    ReplyDelete
  12. У меня на debina 6 не вышло
    ./configure
    checking for grep that handles long lines and -e... /bin/grep
    checking for egrep... /bin/grep -E
    checking for a sed that does not truncate output... /bin/sed
    checking for cc... no
    checking for gcc... no
    configure: error: in `/usr/src/eaccelerator-0.9.6.1':
    configure: error: no acceptable C compiler found in $PATH
    See `config.log' for more details
    web-master:/usr/src/eaccelerator-0.9.6.1# php -m | grep eAcc
    Zend Optimizer requires Zend Engine API version 220060519.
    The Zend Engine API version 220090626 which is installed, is newer.
    Contact Zend Technologies at http://www.zend.com/ for a later version of Zend Optimizer.

    PHP Warning: PHP Startup: Unable to load dynamic library '/usr/lib/php5/20090626+lfs/eaccelerator.so' - /usr/lib/php5/20090626+lfs/eaccelerator.so: cannot open shared object file: No such file or directory in Unknown on line 0
    PHP Warning: PHP Startup: Unable to load dynamic library '/usr/lib/php5/20090626+lfs/memcache.so' - /usr/lib/php5/20090626+lfs/memcache.so: cannot open shared object file: No such file or directory in Unknown on line 0

    Warning: Directive 'register_long_arrays' is deprecated in PHP 5.3 and greater in Unknown on line 0

    Warning: Directive 'magic_quotes_gpc' is deprecated in PHP 5.3 and greater in Unknown on line 0

    ReplyDelete
  13. Евгений, мой опыт использования дотеб сводится к тому, что его использовать НЕ стоит.

    benya, просто выбрать иную папку, /tmp чистится скриптами инициализации операционной системы.

    ReplyDelete
  14. Спасибо, очень помогли настроить акселератор на впс-ке
    С моим конфигом php-fpm не хотел стартовать, а с вашим запустился!

    ReplyDelete

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