Пишу про заинтересовавшие сервисы, блоги, твиттеры, а также собственные идеи и задумки.

Оптимизируем сервак. eAccelerator

4 марта 2011, 13:34


Уже рассмотрели приёмы освобождения оперативки и установку memcache. Теперь самое сладкое — ускоритель php-скриптов — eAccelerator. При правильной настройке он уменьшит время загрузки страниц до трёх раз!

Хотя с ним возможны и некоторые проблемы, если не расчитать свободной памяти, поэтому, если вы ещё не почитали первую статью и ваш сервер обладает меньше, чем 32 мб свободной оперативки, советую перейти к первой части сначала.

Установка eAccelerator

Узнать о последней версии акселератора можно на http://eaccelerator.net/. На момент публикации, ей является версия 0.9.6.1. Скачиваем и ставим командами из терминала (как обычно, для входа в шелл можно скачать программку PuTTy):

cd /usr/local/src
wget 
bzip2 -d eaccelerator-0.9.6.1.tar.bz2
tar xvf eaccelerator-0.9.6.1.tar
cd eaccelerator-0.9.6.1

Далее нам потребуется phpize. Если при вводе данной команды терминал выдаёт ошибку, то тогда ставим пакет php-devel:

yum install php-devel

Убедитесь, что он установился в /usr/bin/phpize, иначе поправьте следующие директории, если необходимо:

phpize
./configure --enable-eaccelerator=shared --with-php-config=usr/bin/php-config
make
make install

Если возникают проблемы при конфигурировании, попробуйте использовать команду без параметров.

Теперь нужно создать папку, в которой будет храниться кэш акселератора:

mkdir -p /var/cache/eaccelerator
chmod 0777 /var/cache/eaccelerator

Настройка eAccelerator

Далее достаточно тонкий и индивидуальный процесс. Откройте файл php.ini (в /etc/) и в секции [extensions] добавьте следующее:

extension="eaccelerator.so"
eaccelerator.shm_size="16"
eaccelerator.shm_max="0"
eaccelerator.cache_dir="/tmp/eaccelerator"
eaccelerator.enable="1"
eaccelerator.optimizer="1"
eaccelerator.check_mtime="1"
eaccelerator.debug="0"
eaccelerator.filter=""
eaccelerator.shm_ttl="0"
eaccelerator.shm_prune_period="0"
eaccelerator.shm_only="0"
eaccelerator.compress="1"
eaccelerator.compress_level="9"

Перезагрузите httpd:

/etc/init.d/httpd restart или service httpd restart

Введите в шелл команду php -v, чтобы убедиться, что eAccelerator установлен и работает. В сообщении должно быть о нём упоминание.

Возможные ошибки

Если после перезагрузки httpd вам выдаётся ошибка 500 или 502, измените настройки и полностью перезагрузите сервер (частный рестарт httpd не всегда помогает в этом случае).

При ошибках вам нужно исправлять значения shm_size и shm_max. 0 — по умолчанию. Рекомендуемое — 16.

Если в логах ошибок вы обнаружите строки «Cannot allocate shared memory…», необходимо произвести следующие манипуляции:

/proc/sys/kernel/shmmax

Выведенное значение в байтах — максимальный предел выделяемой памяти. Рекомендуется в настройках указывать лишь половину от данного значения.  К примеру, если выдаётся 33554432 (32 Мб), уменьшите значение shm_max в php.ini на 16777216 (16 Мб).

Есть и второй путь — увеличить допустимый предел памяти и, соответственно, увеличить его в настройках акселератора.

echo значение_в_байтах > /proc/sys/kernel/shmmax

И прописать это же значение в файле /etc/sysctl.conf в параметре «kernel.shmmax», не забыв его раскомментировать, если нужно (убрать перед строкой #), чтобы значение автоматически присваивалось при перезагрузке сервера.

Правда, в этом случае есть шанс периодически получать ошибки 500 из-за того, что не хватает оперативной памяти на ускоритель (либо если само ядро не может физически выделять больше).

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

ХТМЛ не работает

Ctrl + Enter
Популярное