Одна из самых часто обсуждаемых проблем 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 ответа к “WordPress и eAccelerator. Ускорение WordPress и снижение потребляемой памяти.”
Статья хорошая !! …Вопрос — Если у меня есть на сервере 10 сайтов на WP и они практически одинаковые, отличия не значительны, то как можно сделать чтобы для всех 10 сайтов был использован только один скомпилированый php файл, то есть не создавалось 10 одинаковых php файлов в памяти для 10 разных сайтов ??
Надеюсь понятно ))
Мысль понятна, но как реализовать не знаю…
Я вообще сейчас практически отказался от использования eAccelerator. Все из-за виртуального хостинга. Оказвается eAccelerator сжирает гораздо больше памяти под свои нужды. У меня получилось, что при использовании акселератора среднее потребление памяти оказалось в районе 350 Мб при максимуме в 300. При отключении акселератора среднее потребление стало ниже, но появились высокие пики нагрузки. Установил WP Super Cache. Среднее потребление снизилось до 225 Мб, хотя иногда все же превышаю лимит.
В общем вывод такой. eAccelerator крут, если у вас выделенный сервер / много памяти. А вот на виртуальном хостинге лучше использовать кэширующие плагины, чтобы по максимуму отдавать все в статике.