WordPress и eAccelerator. Ускорение WordPress и снижение потребляемой памяти.

Одна из самых часто обсуждаемых проблем WordPress – объем потребляемой памяти. И действительно, чистая установка WP 2.9.2 для генерации страницы панели управления требует около 23-24 Мб. Стандартный пакет плагинов увеличивает этот объем еще до 25-26 Мб.  Чтобы хоть как-то сократить эти чудовищные цифры, кто-то рекомендует устанавливать облегченные переводы, специальные сборки, плагины (а-ля WP Super Cache) – все это от лукавого ). Радикально проблему решает установка на сервер eAccelerator’a. 

Что такое eAccelerator? Это бесплатное расширение для PHP, увеличивающее скорость выполнения скриптов и снижающее нагрузку на сервер. eAccelerator оптимизирует скрипты, а также кэширует их в уже скомпилированном состоянии. Еще один приятный бонус от использования eAccelerator’a – снижение потребляемой памяти.

К примеру этот блог (WP 2.9.2) без eAccelerator’а потребляет 26 Мб. С eAccelerator это значение снизилось до 5.3 Мб (в 5 раз). Если кому интересно, вот исследования lecactus’а по этой теме.

Вывод из всего этого один – для WordPress нужен хостинг с поддержкой eAccelerator.

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

Для ручной настройки нужен доступ к php.ini.

Параметры eAccelerator:

  • eaccelerator.shm_size – объем памяти зарезервированный под кэш. Важнейший параметр. По умолчанию мой хостер выставил значение 8 Мб. Для WordPress этого оказалось маловато. При этом значении объем потребляемой памяти снизился всего до 9 Мб. Постепенно увеличивая память под кэш дошел до 16 Мб. Потребляемая память WordPress ~ 5 Мб. Дальнейшее увеличение памяти под кэш не привело к уменьшению потребляемой памяти. Таким образом 16 Мб – это минимальное значение для WordPress, а так чем больше кэш – тем лучше.
  • eaccelerator.enable – включить eAccelerator. Должно быть присвоено значение “1”.
  • eaccelerator.optimizer – включить режим оптимизации. Должно быть присвоено значение “1”.
  • eaccelerator.debug – режим отладки. Должно быть значение “0”.
  • eaccelerator.check_mtime – проверяет время создания скрипта, при необходимости обновляет скомпилированную версию скрипта в кэше. Рекомендую эту опцию не отключать, иначе обновлять кэш придется в ручную.
  • eaccelerator.filter – здесь можно указать расширения файлов, которые подлежат кэшированию. Например “*.php *.phtml”. Если значение не указано, кэшируются все файлы, которые обрабатываются с помощью PHP.
  • eaccelerator.shm_max – определят максимальный объем данных, который пользователь может поместить в кэш с помощью функций типа eaccelerator_put. Значение определяется в байтах. “0” – отменяет лимит. Рекомендую оставить “0”.
  • eaccelerator.shm_ttl – если для кэширования скрипта не хватает памяти, eAccelerator удалит из памяти скрипты, к которым не было обращений за последние n секунд. Рекомендую это значение устанавливать в районе 600-1800 (10-30 мин).
  • eaccelerator.shm_prune_period – еще один способ обновления кэша при нехватки памяти. Старые данные будут удалены, если предыдущая попытка была сделана более n секунд назад. По умолчанию значение “0”, при котором eAccelerator не будет пытаться удалить старый данные из памяти.
  • eaccelerator.shm_only – включить или отключить сохранение кеша только в памяти. Этот параметр не влияет на данные сессий и кэширование контента. По умолчанию, значение “0” – данные будут кешироваться и в памяти и на диске. Рекомендую оставить это значение.
  • eaccelerator.compress – должно быть присвоено значение “1”.
  • eaccelerator.compress_level – уровень сжатия. Максимальное значение – 9. Мой хостер выставил – 6. Пришлось менять.

На всякий случай приведу пример своей конфигурации:

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="900"
eaccelerator.shm_prune_period="0"
eaccelerator.shm_only="0"
eaccelerator.compress="1"
eaccelerator.compress_level="9"

Внимание! Если установлен Zend Optimizer, то в php.ini его загрузка должна осуществляться ПОСЛЕ eAccelerator!

Ссылки по теме:

Вливайтесь в общение

2 комментария

Ваш e-mail не будет опубликован. Обязательные поля помечены *

  1. Статья хорошая !! …Вопрос – Если у меня есть на сервере 10 сайтов на WP и они практически одинаковые, отличия не значительны, то как можно сделать чтобы для всех 10 сайтов был использован только один скомпилированый php файл, то есть не создавалось 10 одинаковых php файлов в памяти для 10 разных сайтов ??
    Надеюсь понятно ))

    1. Мысль понятна, но как реализовать не знаю…

      Я вообще сейчас практически отказался от использования eAccelerator. Все из-за виртуального хостинга. Оказвается eAccelerator сжирает гораздо больше памяти под свои нужды. У меня получилось, что при использовании акселератора среднее потребление памяти оказалось в районе 350 Мб при максимуме в 300. При отключении акселератора среднее потребление стало ниже, но появились высокие пики нагрузки. Установил WP Super Cache. Среднее потребление снизилось до 225 Мб, хотя иногда все же превышаю лимит.

      В общем вывод такой. eAccelerator крут, если у вас выделенный сервер / много памяти. А вот на виртуальном хостинге лучше использовать кэширующие плагины, чтобы по максимуму отдавать все в статике.