software:php:eaccelerator

php и eAccelerator

Что такое: PHP accelerator & optimizer

Ubuntu 10.04.3 LTS x64 - в пакетах нет уже собранного eAccelerator'а, значит будем собирать самостоятельно.

  • Ставим необходимый софт для сборки:
# apt-get install build-essential php5-dev
  • Переходим в папку где будем собирать, я использую /usr/src/
# cd /usr/src
  • Берем свежий пакет с сайта eAccelerator :
# wget http://bart.eaccelerator.net/source/0.9.6.1/eaccelerator-0.9.6.1.tar.bz2
  • Распаковываем
# tar xvf eaccelerator-0.9.6.1.tar.bz2
  • Заходим в папку
# cd eaccelerator-0.9.6.1
  • Подготавливаем все к сборке:
# phpize
# ./configure --enable-eaccelerator=shared
  • Собираем и устанавливаем:
# make
# make install

Посмотрите пути, куда будет скопирован собранный eaccelerator.so, у меня это папка /usr/lib/php5/20090629/

  • Подключаем eAcceletor: Можно отредактировать оригинальный php.ini или создать новый файл в папке conf.d которую использует PHP - в моем случае это /etc/php5/conf.d
# cd /etc/php5/conf.d
# touch eaccelerator.ini
  • Добавляем в файл следующие строки:
; Подключаем
zend_extension                  = "/usr/lib/php5/20090629/eaccelerator.so"
; Размер кэша, в Мб. Не может быть больше чем /proc/sys/kernel/shmmax, (0 - использовать по умолчанию, 32 Мб)
eaccelerator.shm_size           = "0"
; Папка для хранения кэша
eaccelerator.cache_dir          = "/var/cache/eaccelerator"
; Переключатель модуля (1 - вкл и 0 - выкл)
eaccelerator.enable             = "1"
; Переключатель оптимизатора  (1 - вкл и 0 - выкл)
eaccelerator.optimizer          = "1"
; Проверять время модификации файлов кеша для их перекомпиляции (1 - вкл и 0 - выкл)
eaccelerator.check_mtime        = "1"
; Добавляет отладочную информацию в лог (1 - вкл и 0 - выкл)
eaccelerator.debug              = "0"
; Куда писать отладочную информацию
eaccelerator.log_file           = "/var/log/eaccelerator.log"
; Фильтр расширений файлов которых надо кешировать. Например, "*.php *.phtml"
eaccelerator.filter             = ""
; Размер выделяемой памяти, в байтах. Допустимо вводить в формате 10240, 10K, 1M и т.д. (0 - безлимит)
eaccelerator.shm_max            = "0"
; Время жизни кеша, секунд
eaccelerator.shm_ttl            = "0"
; Период удаления старых данных из памяти, секунд (0 - не удалять)
eaccelerator.shm_prune_period   = "0"
; Использовать для кеша только память ( 0 - используется диск и память, 1 - только память)
eaccelerator.shm_only           = "0"
; Переключатель уровня сжатия (1 - вкл, 0 - выкл)
eaccelerator.compress           = "1"
; Степень уровня сжатия (1 - минимум, 9 - максимум)
eaccelerator.compress_level     = "7"
; Ограничивает запуск скрипта управления, аналог open_base_dir
eaccelerator.allowed_admin_path = "/var/www/eaccelerator"
  • Создаем папку, куда будет складывать кэш во время работы eAccelerator:
# mkdir /var/cache/eaccelerator
# chown www-data.www-data /var/cache/eaccelerator
  • Ну и пора перезапускать Apache
# sudo service apache2 restart

Настроек в ini-файле много, описание можно посмотреть здесь: http://www.eaccelerator.net/wiki/Settings

Проверить а заработали ли все можно создав php-файл с текстом

<?php
phpinfo();
?>

Если после открытия этого файла нашлось упоминание eAccelerator - значит все заработало. Так же можно проверить папку /var/cache/eaccelerator на наличие новых файлов.

Увеличиваем объем используемой памяти

По умолчанию переменная eaccelerator.shm_size установлена в «0» - это означает использовать объем памяти, принятый в операционной системе по умолчанию. Для Debian/Ubuntu это всего 32 Mb. Мало, что же это за кэш такой? Будем увеличивать.

Добавляем в файл /etc/sysctl.conf строчку

kernel.shmmax = 268435456	# 256 Mb
#kernel.shmmax = 494967295	# 512 Mb

и меняем в /etc/php5/conf.d/eaccelerator.ini

eaccelerator.shm_size           = "256"

Чтобы изменения вступили в силу необходимо применить внесенные изменения в sysctl.conf и перезапустить веб-сервер

# sudo sysctl -p
# sudo service apache2 restart

И зайдя на страничку управления eAccelerator можно посмотреть все ли заработало.

Траблшутинг

Если PHP обновлялся, то eAccelerator перестанет работать. Признаки простые: на страничке управления видим

Caching enabled 	no   
Optimizer enabled 	no   
Check mtime enabled 	no

хотя в файле конфигурации все включено, а команда

# php -m

пишет примерно следующее:

[eAccelerator] This build of "eAccelerator" was compiled for PHP version 5.3.2-1ubuntu4.7. Rebuild it for your PHP version (5.3.2-1ubuntu4.9) or download precompiled binaries.

Решается просто: нужно заново пересобрать как указано выше. Если собираете в старом каталоге, то сначала надо его почистить:

# make clean

и затем собрать снова.

При компиляции (в версиях 0.9.6 и 0.9.6.1) вылазит ошибка:

PHP Warning:  Unknown: open_basedir restriction in effect. File() is not within the allowed path(s): (<your_open_basedir_dirs>) in Unknown on line 0

Все оказывается просто. При использовании директивы PHP open_basedir для обеспечения безопасности, нужно собрать eAccelerator с опцией –without-eaccelerator-use-inode. Данный механизм хранения кэша не совместим с open_basedir, поэтому open_basedir в сочетании с этой опцией приводит к фатальным ошибкам в скриптах.

спасибо leopard: http://leopard.in.ua/2010/07/28/eaccelerator_open_basedir/

Ссылки

  • software/php/eaccelerator.txt
  • Последнее изменение: 2017/05/09 18:34
  • 127.0.0.1