====== 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-файл с текстом
Если после открытия этого файла нашлось упоминание 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
и затем собрать снова.
===== Проблема с open_basedir =====
При компиляции (в версиях 0.9.6 и 0.9.6.1) вылазит ошибка:
PHP Warning: Unknown: open_basedir restriction in effect. File() is not within the allowed path(s): () 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/]]
====== Ссылки ======
* Домашняя страничка - http://www.eaccelerator.net/ и https://eaccelerator.net/ и еще http://sourceforge.net/projects/eaccelerator/
{{tag>php eAccelerator eaccelerator.shm_size}}