Установка eAccelerator на Unix систему. Статьи. wb0.ru - Все для веб-мастера, on-line сервисы

Установка eAccelerator на Unix систему

Эффективным способом снижения нагрузки, создаваемой PHP-скриптами, является установка PHP-акселераторов. Рассмотрим установку и настройку одного из них - eAccelerator.

eAccelerator - это бесплатный PHP ускоритель и оптимизатор с открытым исходным кодом. Он увеличивает производительность PHP скриптов за счет кэширования их в скомпилированном состоянии, в результате чего почти полностью устраняются накладные расходы на их компиляцию. Он так же оптимизирует скрипты, чтобы ускорить их выполнение. eAccelerator обычно уменьшает нагрузку на сервер и увеличивает скорость их выполнение в 1-10 раз.

eAccelerator хранит скомпилированные PHP скрипты в общей (shared) памяти и выполняет код непосредственно из нее. Это создает блокировки только на короткое время при поиске скомпилированного PHP скрипта в кэше, поэтому один скрипт может выполняться одновременно нескольколькими движками. Файлы, которые не помещаются в общей памяти, кэшируются только на диске.

Последний релиз 0.9.6.1 от 31-го мая 2010 г. поддерживает все версии PHP 4 и PHP 5, включая 5.3.

Требования:

  • apache 1.3 и выше
  • PHP 4.1 и выше
  • php-devel
  • autoconf
  • automake
  • libtool
  • m4

Установка eAccelerator
  1. Заходим в Shell своего сервера, используя SSH root доступ. Подразумевается что apache/httpd + php у вас уже установлены. Вам может понадобиться дополнительное ПО. В этом случае установим его через yum:

    yum install php-devel
    yum install autoconf
    yum install automake
    yum install libtool

  2. Cкачиваем последний дистрибутив с сайта-разработчика (на момент написания статьи последней версией является 0.9.6.1), распаковываем его и переходим в каталог с распакованными файлами:

    1. mkdir temp
    2. cd /temp/
    3. wget http://sourceforge.net/projects/eaccelerator/files/eaccelerator/eAccelerator%200.9.6.1/eaccelerator-0.9.6.1.tar.bz2
    4. bzip2 -d eaccelerator-0.9.6.1.tar.bz2
    5. tar xf eaccelerator-0.9.6.1.tar
    6. cd /temp/eaccelerator-0.9.6.1

  3. Проверяем, где находится phpize, необходимый для компиляции модулей php:

    whereis phpize

    Обычно путь до файла /usr/bin/phpize или /usr/local/bin/phpize.

  4. Выполняем компиляцию eAccelerator:

    1. phpize
    2. ./configure
    3. make

    или

    1. export PHP_PREFIX="/usr"
    2. $PHP_PREFIX/bin/phpize
    3. ./configure \
    4. --enable-eaccelerator=shared \
    5. --with-php-config=$PHP_PREFIX/bin/php-config
    6. make

    или

    1. export PHP_PREFIX="/usr"
    2. $PHP_PREFIX/bin/phpize
    3. ./configure --enable-eaccelerator=shared --with-php-config=$PHP_PREFIX/bin/php-config
    4. make

    или

    1. export PHP_PREFIX="/usr"
    2. $PHP_PREFIX/bin/phpize
    3. ./configure --enable-eaccelerator=shared --with-php-config=$PHP_PREFIX/bin/php-config --with-eaccelerator-shared-memory

    Опция --with-eaccelerator-shared-memory необходима для возможности использования API eAccelerator. Полный список опций.

  5. Устанавливаем eAccelerator:

    make install

  6. Настраиваем eAccelerator:

    eAccelerator может быть сконфигурирован в двух вариантах: как Zend-дополнение или как дополнение к PHP. Если вы хотите установить eAccelerator как Zend-дополнение, вам нужно указать полный путь к библиотеке eaccelerator.so (/usr/lib/php4/eaccelerator.so для PHP 4 или /usr/lib/php/eaccelerator.so для PHP 5). Конфигурацию eAccelerator можно разместить в виде файла eaccelerator.ini в директории /etc/php.d/ или указать в файле php.ini (обычно он находится в /etc/php.ini или /usr/local/lib/php.ini). Добавляем в самый конец php.ini следующие строки:

    1. extension="eaccelerator.so"
    2. eaccelerator.shm_size="64"
    3. eaccelerator.cache_dir="/var/cache/eaccelerator"
    4. eaccelerator.enable="1"
    5. eaccelerator.optimizer="1"
    6. eaccelerator.check_mtime="1"
    7. eaccelerator.debug="0"
    8. eaccelerator.filter=""
    9. eaccelerator.shm_max="0"
    10. eaccelerator.shm_ttl="3600"
    11. eaccelerator.shm_prune_period="0"
    12. eaccelerator.shm_only="0"
    13. eaccelerator.compress="1"
    14. eaccelerator.compress_level="5"

    Или для варианта использования eAccelerator как расширение Zend:

    1. zend_extension="/usr/lib/php4/eaccelerator.so"
    2. eaccelerator.shm_size="64"
    3. eaccelerator.cache_dir="/var/cache/eaccelerator"
    4. eaccelerator.enable="1"
    5. eaccelerator.optimizer="1"
    6. eaccelerator.check_mtime="1"
    7. eaccelerator.debug="0"
    8. eaccelerator.filter=""
    9. eaccelerator.shm_max="0"
    10. eaccelerator.shm_ttl="3600"
    11. eaccelerator.shm_prune_period="0"
    12. eaccelerator.shm_only="0"
    13. eaccelerator.compress="1"
    14. eaccelerator.compress_level="5"

    При наличии в php.ini директивы extension_dir путь к расширению указываем относительный, иначе перед блоком настроек eAccelerator добавляем:

    extension_dir = "/usr/local/lib/php/extensions/no-debug-non-zts-20060613"

  7. Создаем каталог, который будет использоваться для кэша:

    1. mkdir /var/cache/eaccelerator
    2. chmod 777 /var/cache/eaccelerator

  8. Перезапускаем apache:

    service httpd restart

    или

    /etc/rc.d/init.d/httpd restart

  9. Проверяем, как работает eAccelerator:

    php -v

    В результате вы должны увидеть информацию о версии eAccelerator вида "with eAccelerator v0.9.6.1, Copyright (c) 2004-2010 eAccelerator, by eAccelerator".

    Или создайте php-файл со следующим содержимым:

    <?php phpinfo(); ?>

    При его выполнении должна появиться отдельная секция с описанием настроек eAccelerator.

    Если через некоторое время в каталоге /var/cache/eaccelerator появились подкаталоги 1, 2, 3... - eAccelerator работает.

Описание некоторых параметров конфигурации eAccelerator

ПараметрОписание
eaccelerator.shm_sizeРазмер кэша совместно используемой памяти, устанавливается в мегабайтах
eaccelerator.cache_dirДиректория для дискового кэша. eAccelerator сохраняет в указанной директории бинарное представление кода, сессии и другие данные
eaccelerator.enableС помощью этой опции можно отключать и включать eAccelerator. Значение 1 - включено, 0 - выключено
eaccelerator.optimizerПодключить или отключить встроенный оптимайзер, которые увеличивает скорость выполнения кода
eaccelerator.check_mtimeВключаем проверку модификации PHP файлов. Поставьте "1" если требуется, чтобы проверялись все модифицированные файлы и перекомпиливались заново
eaccelerator.debugРежим отладки. По умолчанию 1. При большой посещаемости может сильно увеличить размер логов Apache
eaccelerator.filterКакие файлы должны кешироватья. По умолчанию кешируются все файлы
eaccelerator.shm_maxМаксимально допустимое значение, которое может быть отправлено в разделяемую память. По умолчанию 0 - без ограничений. Размер указывается в байтах, но можно указать приставки, например: 10240, 10K, 1M
eaccelerator.shm_ttlУказывает в секундах время, по истечении которого давно не используемый код должен быть удален из совместно используемой памяти при превышении объема выделяемой памяти.

По умолчанию эта опция отключена, мы рекомендуем устанавливать значение от 60 до 300 при большом количестве файлов и от 900 до 1800 при малом количестве файлов.

eaccelerator.shm_prune_periodКогда eAccelerator не имеет достаточно свободного памяти, он пытается удалить старые данные, если предыдущая попытка была сделана более "shm_prune_period" секунд назад. По умолчанию значение "0", при котором eAccelerator не будет пытаться удалить старый данные из памяти.
eaccelerator.keys
eaccelerator.session
eaccelerator.content
Параметры указывают доступные способы сохранения кэша eAccelerator.

Возможные значения:

  • shm_and_disk - кэш данных в общей памяти и на диске (по умолчанию);
  • shm - кэш данных в общей памяти или на диске, если общая память или размер данных больше, чем "eaccelerator.shm_max";
  • shm_only - кэш данных в общей памяти;
  • disk_only - кэш данных на диске;
  • none не кэшироваь данные.
eaccelerator.compressВключить или отключить сжатие закешированного контента. По умолчанию 1 - сжимать
eaccelerator.compress_levelУровень сжатия. По умолчанию 9 - максимум
eaccelerator.allowed_admin_pathУстанавливает путь к контрольной панеле

Дополнительная информация
  1. Отсутствует gcc и make. Необходимо установить gcc и make:

    yum install gcc
    yum install make

  2. Отсутствует phpize. Необходимо установить php-devel

    yum install php-devel

  3. С некоторыми версиями eAccelerator есть проблема с open_basedir. Решается патчем. Перед компиляцией eAccelerator в файле eaccelerator.c поменять строку. Для 0.9.6:

    if (PG(open_basedir) && php_check_open_basedir(realname TSRMLS_CC)) {

    на:

    if (PG(open_basedir) && php_check_open_basedir(file_handle->filename TSRMLS_CC)) {

    Для 0.9.6.1:

    if (php_check_open_basedir(realname TSRMLS_CC)) {

    на:

    if (php_check_open_basedir(p->realfilename TSRMLS_CC)) {

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

    1. phpize
    2. ./configure --without-eaccelerator-use-inode
    3. make
    4. make install

    Если не помогло, тогда устанавливаем версию 0.9.5.3:

    wget http://bart.eaccelerator.net/source/0.9.5.3/eaccelerator-0.9.5.3.tar.bz2

  4. Для исправления ошибки 'zend_property_info' really has no member 'ce' перед компиляцией eAccelerator в файле ea_store.c меняем код:

    zend_property_info* parent_info = NULL;  

        return (child_info->ce != from);  

    if (parent && zend_hash_quick_find(&parent->properties_info, p->arKey, p->nKeyLength, p->h, (void **) &parent_info)==SUCCESS) {

    на

    zend_property_info* parent_info = NULL;  

    #ifdef ZEND_ENGINE_2_2  
        return (child_info->ce != from);  
    #endif  

    if (parent && zend_hash_quick_find(&parent->properties_info, p->arKey, p->nKeyLength, p->h, (void **) &parent_info)==SUCCESS) {

  5. Ошибка [Zend Optimizer] Zend Optimizer 3.3.3 is incompatible with eAccelerator 0.9.6.1 in Unknown on line 0. Варианты решения:
    • В файле php.ini подключить eAccelerator как дополнение к PHP.
    • В файле php.ini подключить eAccelerator перед подключением Zend Optimizer.
    • Установить eAccelerator версии 0.9.5.
    • Установить Zend Optimizer версии 3.2.8
  6. В некоторых системах при задании размера кеша eAccelerator более 32Mb может возникнуть ошибка 502 Internal Server Error. Для решения проблемы необходимо в файле /etc/sysctl.conf прописать значение kernel.shmmax. Например, для eaccelerator.shm_size="64" задаем kernel.shmmax = 67108864 (64*1024*1024).
  7. После выполнения команды make install печатается каталог, в который установлен eAccelerator. Например:

    Installing shared extensions:
    /usr/local/lib/php/extensions/no-debug-non-zts-20060613/

    Для указания пути без подкаталога необходимо скопировать модуль eaccelerator.so в общий каталог расширений PHP:

    cp /usr/local/lib/php/extensions/no-debug-non-zts-20060613/eaccelerator.so /usr/local/lib/php/extensions/eaccelerator.so

  8. Если понадобится обновить PHP, то после его обновления обязательно нужно переустановить eAccelerator. Для этого необходимо:
    • удалить старое расширение eaccelerator.so из каталога с расширениями PHP (обычно это /usr/local/lib/php/extensions/);
    • обновить пакет php5-dev:

      1. aptitude update
      2. apt-get install php5-dev

    • переустановить eAccelerator;
    • перезапустить веб-сервер.

  9. После установки eAccelerator может перестать работать PHPMyAdmin (будет открываться белая страница). В этом случае нужно отключить eAccelerator для директории /usr/share/phpmyadmin в конфигурационном файле apache:

    1. <Directory /usr/share/phpmyadmin>
    2. php_admin_value eaccelerator.enable 0
    3. </Directory>

  10. Принудительная очистка файлового кэша. С целью недопущения исчерпания дискового пространства под устаревшие кэши eAccelerator рекомендуем очищать файлы, созданные более 12 часов назад:

    tmpwatch --mtime --all 12 /tmp/eaccelerator

  11. Во FreeBSD eAccelerator можно установить из портов:

    1. whereis eaccelerator
    2. eaccelerator: /usr/ports/www/eaccelerator
    3. cd /usr/ports/www/eaccelerator
    4. make install clean

  12. Установка для Windows. Загрузите бинарные файлы для установленной версии PHP 4 или PHP 5.

    В директорию диск:\{путь к PHP}\ext\ разместите загруженную dll, предварительно переименовав ее в eaccelerator.dll, создайте директорию для файлов eAccelerator, например, по адресу c:\tmp\eaccelerator.

    В php.ini добавьте строку extension="eaccelerator.dll" и разместите конфигурацию eAccelerator, например:

    1. eaccelerator.shm_size="64"
    2. eaccelerator.cache_dir="c:\tmp\eaccelerator"
    3. eaccelerator.enable="1"
    4. eaccelerator.optimizer="1"
    5. eaccelerator.check_mtime="1"
    6. eaccelerator.debug="0"
    7. eaccelerator.filter=""
    8. eaccelerator.shm_max="0"
    9. eaccelerator.shm_ttl="3600"
    10. eaccelerator.shm_prune_period="1800"
    11. eaccelerator.shm_only="0"
    12. eaccelerator.compress="1"
    13. eaccelerator.compress_level="9"
    14. # Раскомментировать при необходимости сохранения кэша только в памяти
    15. #eaccelerator.keys = "shm"
    16. #eaccelerator.sessions = "shm"
    17. #eaccelerator.content = "shm"

    Перезапустите службу Apache.

  13. Ошибки:
    /usr/src/eaccelerator-0.9.6.1/ea_store.c: In function 'store_property_access_check':
    /usr/src/eaccelerator-0.9.6.1/ea_store.c:683: error: 'zend_property_info' has no member named 'ce'
    /usr/src/eaccelerator-0.9.6.1/ea_store.c:685: warning: dereferencing type-punned pointer will break strict-aliasing rules

    Решение: установить eAccelerator 0.9.6


Дата публикации: 27.10.2010
wb0.ru

Статьи по теме:

   Ваш псевдоним:
Ваш комментарий:

Календарь событий


Новости Интернет


Поиск





Последний пересчет

тИЦ:07 Окт 15
PR:09 Дек 13

Наши партнеры

wservices.ru - регистрация доменов, Whois-сервисы Смайлы на все случаи жизни


 
Copyright © 2006-2024, wb0.ru