Кэширование с помощью eaccelerator PHP


Оглавление (нажмите, чтобы открыть):

Ускорение сайта: установка и настройка eaccelerator

Приветствую вас, друзья! Сегодня я хочу поговорить о такой вещи как ускорение сайта, которую мы будем получать за счет установки и настройки необходимых компонентов на VPS или VDS хостинг.

Помню когда я переезжал на vps хостинг, то озадачил себя тем, что хотел как бы все сразу настроить, чтобы потом, после установки каких либо расширений и дополнений, ничего не слетело. И одним из компонентов для ускорения сайта я выбрал eaccelerator.

Eaccelerator – это программа, которая кэширует байт-код php скриптов, для их последующего быстрого исполнения. Также php скрипты начнут потреблять значительно меньше оперативной памяти. Например, мой блог вместо 36 мегабайт потребляет 12.5 мегабайт. А если говорить о скорости загрузки страницы, то она уменьшилась с 0.9 секунд до 0.1 – 0.2 секунд. То есть сразу становится понятно, что использование кэширования байт-кода скриптов имеет огромный смысл для существования, так же как и переезд с обычного виртуального хостинга на vps и выше.

Установка eaccelerator несложная, даже можно сказать примитивная. Для того чтобы установить его, вам потребуется программа для подключения к серверу по SSH протоколу, например я пользуюсь программой Putty. Как ей пользоваться я описывал в посте про установку ispmanager.

И так, надеюсь, вы подключились к серверу, ибо без этого мы просто не сможем продолжить дальше.

Теперь, когда терминал загружен и работает, нам нужно прописать команду, чтобы скачать библиотеку php – developer, которая требуется для установки и настройки eaccelerator.

Пишем в терминале следующую команду:

Теперь нажимаем enter, и произойдет установка и настройка библиотеки. В процессе установки, может понадобиться нажать кнопку «Y» – это согласие на скачивание дистрибутива.

Далее, после установки библиотеки мы можем приступить к скачиванию дистрибутива eaccelerator и его последующей установки.

Пишем в терминале следующие команды (после каждой команды нажимаем enter):

В процессе установки, может понадобиться нажать кнопку «Y» – это согласие на скачивание дистрибутива и проведение необходимых стандартных настроек и установок.

Теперь, когда установка eaccelerator выполнена, можно перейти к созданию конфигурационного файла eaccelerator.ini и внесению в него необходимых настроек. Файл необходимо создать в папке conf.d, которая расположена в пути: /etc/php5/conf.d/. Но вы можете просто скачать eaccelerator.ini, и не заморачиваться с его созданием. Скачанный файл помещаете в папку, упомянутую чуть выше с помощью менеджера файлов вашего vps хостинга.

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

Пишем в терминале следующие команды (после каждой команды нажимаем enter):

Теперь после создания папки и изменения прав на неё, мы можем приступить к внесению своих настроек в конфигурационный файл eaccelerator. Откройте файл обычным блокнотом, внесите изменения и сохраните, а потом уже загрузите.

Расскажу теперь «что есть что» и с чем его едят.

eaccelerator.shm_size

выделяемая оперативная память под кэширование байт-кода скриптов. По умолчанию значение – 0, но чисто для своего блога я выделяю 64 мегабайта. А там чем больше, тем лучше.

eaccelerator.cache_dir

каталог (папка) хранящая кэш файлы байт-кода.

eaccelerator.enable

включение и отключение eaccelerator. Значения 1 и 0 соответственно.

eaccelerator.optimizer

включение и отключение оптимизатора, который может ускорить выполнение скрипта до кэширования его байт-кода. Значения 1 и 0 соответственно.

eaccelerator.debug

включение и отключение отладчика. Смысл в нем есть, но только когда вы занимаетесь отладкой Eaccelerator, так как все ошибки будут записываться в лог файл. Значения 1 и 0 соответственно.

eaccelerator.check_mtime

включение и отключение проверки времени изменения скриптов. Значения 1 и 0 соответственно. Функция полезна тем, что не приходится каждый раз удалять кэш байт-кода скриптов вручную, но она и потребляет ресурсы на это. Лично у себя оставил включенным, так как если внесу изменения в php скрипт, то не придется удалить его кэш байт-кода вручную.

eaccelerator.filter

сюда вы можете написать шаблон, который будет: только кэшировать php скрипты определенного расширения (например: «*. PHP *. Phtml»), или не кэшировать определенные расширения php скриптов (например: «!*. PHP *. Phtml»). Значение по умолчанию «» – кэшировать все расширения скриптов.

eaccelerator.shm_max

максимально выделяемая оперативная память под кэширование байт-кода скриптов. По умолчанию значение – 0, а так значение можно указать в мегабайтах -128M, 256M и т.д.

eaccelerator.shm_ttl

время хранения кэшированных скриптов. Например, если у eaccelerator не хватает выделенной памяти, то он пытается удалить старый кэш, к которому не было обращений в течение заданного времени. Значение по умолчанию 0, но лично я поставил 3600 секунд. Так как если оставить значение 0, то удаляться старый кэш не будет.

eaccelerator.shm_prune_period

время хранения кэшированных скриптов. Например, если у eaccelerator не хватает выделенной памяти, то он пытается удалить старый кэш, который пытался удалить eaccelerator более “заданное время” тому назад. Значение по умолчанию 0, но лично я поставил 1800 секунд.

eaccelerator.shm_only

включение и отключение хранения кэшированных скриптов на диске. Значение по умолчанию 0, которое позволяет использовать диск и оперативную память для хранения кэша. Значения 0 и 1 соответственно.

eaccelerator.compress

включение и отключение сжатия содержимого скриптов перед его кэшированием. Значения 1 и 0 соответственно.

eaccelerator.compress_level

уровень сжатия содержимого скриптов. Значения от 1 до 9. По умолчанию устанавливается значение 9, которое является максимальным уровнем сжатия.

Вот в принципе и все основные настройки. Но, eaccelerator также может кэшировать и контент страницы. Для этого отведена отдельная настройка.

eaccelerator.content

включение и отключение кэширования контента. Значения: none – не кэшировать, disk_only – сохранять кэш на диске, shm_only – сохранять кэш в памяти, shm_disk – сохранять кэш в памяти и на диске. У себя пробовал данную настройку и время загрузки страницы уменьшилось на 10%.

Еще хочу добавить, что после установки eaccelerator, может перестать работать phpmyadmin. Паниковать не стоит, так как решение тут простое, а именно отключить eaccelerator для phpmyadmin. Для этого вносим в конфигурационный файл apache для phpmyadmin, следующую настройку. Файл находится тут: /etc/phpmyadmin/apache.conf .

Вносим настройку в конфигурационный файл:

После внесения изменений требуется перезагрузить apache.

Пишем в терминале следующую команду:

На этом установка и настройка окончательно закончена. А как вы думаете, есть ли смысл переезжать на vps хостинг ради такого ускорения сайта?

Отличные упражнения для пресса с колесом помогут вам сделать вашу фигуру лучше.

Кэширование переменных PHP

1 Magician [2011-07-15 06:52:00]

У меня есть некоторые данные в базе данных MySQL, которые чаще всего статичны. Они в основном почти статические ценности, такие как города, государства и этнические. Я хочу кэшировать их в переменной, предпочтительно в памяти, так что мне не нужно будет выполнять другой запрос в MySQL каждый раз, когда загружается страница.

Проблема в том, что мой хостинг не поддерживает memcache и APC. Единственным ускорителем, который я смог найти, является eAccelerator, и я не думаю, что он будет делать то, что я имею в виду.

Есть ли способ сделать кеширование? Это http://www.k-disk.net

php hosting eaccelerator

4 ответа

2 Решение armandomiani [2011-07-16 22:17:00]

Вы можете использовать расширение общей памяти.

4 Sukumar [2011-07-15 10:21:00]

Кэширование — отличный пример вездесущего компромисса в программировании. Вы можете сэкономить время, используя пространство для хранения результатов. [1]

На многих уровнях существует множество способов реализации кеша на веб-сайте. Давайте посмотрим на них, начиная с передней части и двигаясь к бэкэнду, не вдаваясь в слишком подробные сведения.

HTTP-кеширование

Кэширование уровня приложения

Это кэширование объектов базы данных «дорогостоящий запрос». Например: memcache, кеширование страниц в файлах и т.д.

Кэш Op-кодов

Например: ускоритель PHP, eAccelerator и т.д.

Кэш уровня базы данных

Оптимизация базы данных путем настройки ее параметров на основе необходимости и аппаратного обеспечения.

В вашем случае я бы рекомендовал настраивать с помощью my.cnf, поскольку с достаточной оперативной памятью MySQL работает довольно быстро. Просто постарайтесь не предварительно оптимизировать.

Вы можете просто написать файл на свой сервер, который сохранит сериализованный массив переменных php. Просто подключите все свои переменные в ассоциативный массив, а затем сериализуйте и сохраните. Хотя я честно не понимаю, почему вы не сохраняете переменные в таблице переменных в базе данных. Это не дорогостоящая операция.

Если это не работает для вас, есть способ получить memcache на вашем общем хосте, если у вас есть доступ к SSH. Я на самом деле сделал это на hostmonster. Здесь идет прогулка (хотя это не первая статья, которую я изначально использовал).
http://andrewpeng.net/posts/2011/06/271273-memcached-and-dreamhost-shared-tutorial.html

Мастер Йода рекомендует:  Задачи умеренной сложности — Страница 2 из 2 — всё по этой теме для программистов

Вы можете создать собственный класс кэша для хранения и чтения данных с диска, используя file_put_contents() и file_get_contents().

Выделенный сервер своими руками

Навигация

Облако тегов

Мои контакты

mail:
admin@dedicatesupport.com

Партнеры


Друзья

Счетчики

eAccelerator — ускорение работы php приложений.

Что такое eAccelerator?
eAccelerator это свободно-распространяемый PHP акселератор, оптимайзер и средство для кеширования динамического контента. Он увеличивает производительность PHP скриптов за счет их кеширования в скомпилированном состоянии, тем самым предотвращая их постоянную перекомпиляцию. В результате происходит увеличение скорости их выполнения. eAccelerator обычно уменьшает нагрузку на сервер и увеличивает скорость исполнения PHP кода на величину от 1 до 10 раз.
В результате моих экспериментов, было выяснено, что скорость выдачи контента, например, для сайтов на Drupal увеличивается до 30 раз.
В этой маленькой заметке опишу процесс установки eAccelerator на linux систему.
Итак приступим.
Домашняя страница проекта http://eaccelerator.net/
Выбираем последнюю версию. На данный момент последней версией является 0.9.5.2. Скачиваем и распаковываем ее.
cd /usr/local/src
wget http://bart.eaccelerator.net/source/0.9.5.2/eaccelerator-0.9.5.2.tar.bz2
bzip2 -d eaccelerator-0.9.5.2.tar.bz2
tar xvf eaccelerator-0.9.5.2.tar
cd eaccelerator-0.9.5.2
Далее необходимо проверить есть ли в нашей системе необходимые для создания модуля php пакеты.
Нам нужны:

Если производилась установка веб сервера, и php из пакетов то нам необходимо установить еще и модуль php-devel. Именно в нем находится необходимая нам программа phpize, с помощью которой и происходит компиляция модулей для php.
yum install php-devel
Далее выясняем местоположение файла phpize с помощью команды:
whereis phpize
И смотрим путь до файла. Обычно это /usr/bin/phpize.
В таком случае для компиляции модуля выполняем следующие действия:
export PHP_PREFIX=»/usr»
$PHP_PREFIX/bin/phpize
./configure \
—enable-eaccelerator=shared \
—with-php-config=$PHP_PREFIX/bin/php-config
make
make install
Далее находим файл php.ini (обычно он находится в /etc/php.ini) и прописываем в нем следующие строки:

extension=»eaccelerator.so»
eaccelerator.shm_size=»16″
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=»0″
eaccelerator.shm_prune_period=»0″
eaccelerator.shm_only=»0″
eaccelerator.compress=»1″
eaccelerator.compress_level=»9″

Это для варианта использования eAccelerator как расширения php. Я использую такой подход. Есть еще вариант использования eAccelerator как расширения Zend. В таком случае прописать нужно следующие строки:

zend_extension=»/usr/lib/php4/eaccelerator.so»
eaccelerator.shm_size=»16″
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=»0″
eaccelerator.shm_prune_period=»0″
eaccelerator.shm_only=»0″
eaccelerator.compress=»1″
eaccelerator.compress_level=»9″

Далее настал черед создания каталога, котрый будет использовать eaccelerator для хранения своего кеша:
mkdir /tmp/eaccelerator
chmod 0777 /tmp/eaccelerator
Далее перезапускаем наш апач:
service httpd restart
и радуемся ускорению.
Ну в общем и все. Как всегда, жду ваших замечаний и предложений.

P.S. Если кому-нибудь нужны мои заметки, пожалуйста берите. Только оставьте ссылку на http://dedicatesupport.com

а нагрузку от wordpress

а нагрузку от wordpress сильно поможет снизить, не знаете?

> Проверьте сайт

> Проверьте сайт http://vkimo.org , memcached пока ещё едва дышит, но научим (ся)

Подобные сайты не шибко и нуждаются в ускорении.
Посещаемость то какая?

Вы не прав, коллега. Ускороение нужно хотя бы для того чтобы вы могли слушать музыку с моего свйта http://gallery.vkimo.org/v/mmyun/

Посещение слабое. Да это и не ставилось целью. Сайт для «своих» а сервер стоит у меня в гараже (г. Тампа, Флорида) на обычном чиповом (7 Mbps) кабеле.
После ряда экспериментов перевёл сервер на Zend Server CE http://www.zend.com/en/products/server-ce/downloads. Инсталляция как песня. Пришлось немного поломать голову как заставить апач выдавать сайты с директории напрямую чтобы не утрудать себя пропиской отдельных файлов для каждого сайта. ZS CE имеет всё что нужно для моих потребностей APC, Memcached module и т.п. Рекомендую. Не в качестве рекламы :)) Zend знают все админы. А этот Free. Т.е как Free Beer — и вкусно и на душе приятно.

Нужна помощь в том чтобы

Нужна помощь в том чтобы подружить Zend server CE и Plesk Panel, срочно!

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.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. Пришлось менять.
  • На всякий случай приведу пример своей конфигурации:

    Zend OPcache Акселератор PHP

    Как известно акселераторы PHP призваны повысить производительность скриптов PHP за счет кеширования байт-кода.

    Обычно выполнение скрипта происходит по схеме:

    • Чтение файла скрипта
    • Генерация байткода
    • Выполнение кода
    • Вывод результата

    Если не использовать акселераторы php то генерация байткода происходит каждый раз когда вызывается скрипт и на это затрачивается часть времени.

    И так если мы хотим немного ускорить наш сайт то ставим Zend OPcache (поддерживается в версиях PHP 5.2.x, 5.3.x, 5.4.x. а начиная с версии PHP 5.5 OPcache включен в официальный дистрибутив.).

    Zend OPcache доступен в виде исходников на Github, либо в виде PECL дистрибутива.

    И так установка на CentOS

    Пакеты по зависимостям

    Скачиваем с сайта пакет для установки

    Установка Zend OPcache как пакет PECL

    После установки добавляем строку zend_extension=/usr/lib64/php/modules/opcache.so в файл /etc/php.d/opcache.ini

    По рекомендации разработчиков можно добавить данные настройки в файл /etc/php.d/opcache.ini

    Настроки Zend Opcache:

    Параметр Default Описание
    opcache.enable 1 Включение/выключение OPcache. В выключенном состоянии код не оптимизируется и не кешируется.
    opcache.enable_cli Включение OPcache для CLI-версии PHP. Подходит для тестирование и отладки.
    opcache.memory_consumption 64 Размер используемой памяти для хранения прекомпилированного PHP-кода. Указывается в мегабайтах.
    opcache.interned_strings_buffer 4 Количество памяти для пула строк в мегабайтах.
    opcache.max_accelerated_files 2000 Максимальное количество ключей (скриптов) в хэш-таблице OPcache.
    Число должно быть простым и быть больше, чем те, что приведены в примере:( 223, 463, 983, 1979, 3907, 7963, 16229, 32531, 65407, 130987, 262237, 524521, 1048793 ).
    Допустимы числа между 200 и 1000000.
    opcache.max_wasted_percentage 5 Максимальный процент “замусоренной” памяти для запланированного перезапуска.
    opcache.use_cwd 1 При включении этого параметра, OPcache добавляет текущую рабочую директорию в ключ скрипта для предотвращения возникновения колизий между файлами с одинаковым именем. Выключение этой функции увеличивает производительность, но может нарушить работу приложений.
    opcache.validate_timestamps 1 При отключенном параметре, появляется возможность обнуления OPcache вручную или перезапуском вебсервера для того, чтобы привести в актуальное состояние данных об изменениях в файлах.
    opcache.revalidate_freq 2 Через какой промежуток времени (в секундах) проверять изменения временных меток для поддержания данных в памяти в актуальном состоянии. (“1” означает проверку с периодичностью раз в секунду для запроса, “0” — постоянная проверка)
    opcache.file_update_protection 2 Предотвращает кеширование файлов, которые были изменены меньше, чем в указанное время (в секундах). Эта возможность защищает не полностью обновленные файлы от кеширования. В случае мгновенного обновления всех файлов, для увеличения производительности установите параметр равный “0”.
    opcache.revalidate_path Включение или отключение оптимизации поиска файлов в include_path. Если поиск файлов выключен и будет найден закешированный файл, используемый в include_path, файл не будет найден повторно. Таким образом, если файл с именем, попадающийся где-либо еще в include_path, он не будет найден. Включайте этот параметр только в случае, если это действительно принесет ожидаемый эффект ускорения. По умолчанию возможность отключена, т.е оптимизация активирована.
    opcache.save_comments 1 Если выключено, все комментарии PHPDoc будут удалены из кода с целью уменьшения размера оптимизированного кода. Отключение параметра может вызвать некорректную работу некоторых приложений или фреймворков
    opcache.load_comments 1 Если выключено, комментарии PHPDoc не будут загружаться из общей памяти. При включении вывода, комментарии будут сохранятся, но выводиться приложениями только в случае надобности.
    opcache.fast_shutdown Если включено, будет использоваться последовательность быстрых выключений для оптимизированного кода. Эта возможность не освобождает каждый используемый блок памяти, но позволяет работать Zend Engine Memory Manager.
    opcache.enable_file_override При включении OPcache будет проверять наличие закешированного файла при вызовах file_exists(),is_file() и is_readable(). Это может увеличить скорость работы в приложениях, которые проверяют расширение и читабельность PHP-скриптов, но появляется риск вывода устаревших данных в случае отключения параметра opcache.validate_timestamps.
    opcache.optimization_level 0xffffffff Маска битности, в которой каждый бит включает или отключает в соответствующие проходы OPcache.
    opcache.inherited_hack 1 Включение этого хака в качестве рабочего окружения при ошибках.
    opcache.dups_fix Включайте этот параметр только при появлении ошибок вида «Cannot redeclare class .
    opcache.blacklist_filename Месторасположение списка файлов, к которым запрещен доступ для OPcache (поддерживаются маски). Каждый такой файл является текстовым файлом, в котором хранятся имена файлов, которые не требуется кешировать.Формат файла предусматривает размещение каждого имени файла в отдельной строке.
    opcache.max_file_size Позволяет исключать большие файлы из кеширования. По умолчанию кешируются все файлы.
    opcache.consistency_checks Проверять контрольную сумму кэша каждое N-ое количество запросов. По умолчанию параметр имеет значение равное нулю, что означает отключение проверки. Подсчет контрольной суммы снижает производительность, этот параметр следует включать только если требуется отладка.
    opcache.force_restart_timeout 180 Какое время ожидать (а секундах) перед запланированной перезагрузкой в случае недоступности кэша.
    opcache.error_log Определение названия и местоположения лога ошибок OPcache. При пустом значении ошибки выводятся в консоль.
    opcache.log_verbosity_level 1 Все ошибки OPcache отправлять в лог-файл лог-файл веб-сервера. По умолчанию, журналируются только критические ошибки (level 0) или обычные ошибки (level 1). Так же можно включить выводит предупреждений (level 2), информационных сообщений (level 3) или отладочную информацию (level 4).
    opcache.preferred_memory_model Предпочитаемый бэк-энд общей памяти. Можно оставить пустым и позволить системе самой разобраться.
    opcache.protect_memory Защите общей памяти от несанкционированной записи во время выполнения скрипта. Полезно только для отладки.
    opcache.restrict_api Разрешение вызова API-функций OPcache из PHP-скриптов, путь к которым начинается тем, что указано в строке. По умолчанию пустое значение означает запрет на всё.
    Мастер Йода рекомендует:  В чем разница между веб-разработчиком и веб-дизайнером

    Для тестирования и мониторинга Zend OPcache есть несколько удобных интерфейсов.

    Каждый из этих интерфейсов представляет собой небольшой PHP скрипт, который просто загружается на хост и открывается при помощи броузера.

    Eaccelerator и уменьшение потребление RAM, eaccelerator php и WordPress

    Eaccelerator и уменьшение потребление RAM, eaccelerator php и 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.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. Пришлось менять.
  • На всякий случай приведу пример своей конфигурации:

    Ускорение PHP | настройка Zend OPcache


    Для уменьшения потребления памяти PHP и ускорения его работы рекомендуется использовать различные акселераторы. Особенно это актуально для бюджетных VPS с небольшим количеством оперативной памяти на которых крутятся сайты на прожорливых CMS типа WordPress.

    Zend OPcache — расширение для PHP, основное назначение которого — увеличение производительности интерпретатора при обработке сценариев путем кэширования их байт-кода.

    В данной статье расскажу как установить Zend OPcache на Ubuntu Server 18.04.

    Если вы используете PHP 5.5 и выше, то в нем по-умолчанию идет Zend OPcache и ничего дополнительно ставить не нужно.

    Проверим ZendOpCache на Ubuntu Server

    Вывод должен быть примерно такой:

    Настройка Zend OPcache

    В сети много статей в которых описывается оптимальная настройка Zend OPcache. Почитав их, я решил объединить их в своей статье и найти золотую середину. На моем сервере установлен php 7.3 + nginx. И так, открываем файл конфигурации php. :

    Находим следующие строки и выставляем значения как у меня (хотя можете поэкспериментировать)

    • opcache.enable — включаем наш Zend OPcache.
    • opcache.enable_cli — включает OPcache в CLI-версии PHP.
    • opcache.memory_consumption — задает использование памяти для расширения (если ОЗУ позволяет, то можно увеличить значение).
    • opcache.interned_strings_buffer — задает объем памяти для хранения интернированных строк, в мегабайтах.
    • opcache.max_accelerated_files – максимальное количество скриптов в памяти (тут тоже можно увеличить, если памяти хватает).
    • opcache.revalidate_freq — это валидация кэша в секундах, в интернете все рекомендуют значение 60, я же использую 2, но иногда рекомендуют ставить 0 (ноль), то есть постоянно проверять на изменения. К примеру в Joomla OPcache кэширует все файлы и будет отдавать кэш после сохранения файлов еще то время, которое в этой строке. То есть вы сохранили файл, но все равно в течении указанного времени будете видеть старую копию из кеша. Поэтому не жалуйтесь, что файлы не сохраняются, подождите выставленное вами время.
    • opcache.fast_shutdown — определяет включено или выключено быстрое завершение последовательности ускоренного, кода, дает возможность использовать Zend Engine Memory Management

    Перезапуск web-сервера

    Чтобы изменения вступили в силу нужно перезапустить вэб-сервер:

    Изменение скорости работы сайта после установки акселератора PHP

    Блог на WordPress, до настройке Zend OPcache, страница генерировалась за 0,37 сек., потребление памяти составляло 37 МБ.

    После установки акселератора Zend OPcache скорость генерации страницы снизилась до 0,22 сек, потребление памяти при этом составило 11 МБ.

    Комментарии излишни. Использование PHP акселератора положительно сказывается на скорости работы сайта и снижает потребление памяти.

    Мастер Йода рекомендует:  5 шагов, чтобы стать системным администратором

    Если есть вопросы, то пишем в комментариях и не забываем проголосовать за статью.

    Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

    удалить кеш с помощью префикса в apc / memcache / eaccelerator

    Предположим, что у меня есть эти переменные, сохраненные в apc, memcached и eaccelerator:

    • article_1_0
    • article_1_1
    • article_3_2
    • article_3_3
    • article_2_4

    Как я могу удалить все кэшированные переменные, которые начинаются с article_3_ (они могут достигать 10000)?

    есть ли способ перечислить кешированные переменные?

    Медленное решение

    Для memcached, посмотрите на ответ @ rik

    Правильное решение

    Общее решение для истечения нескольких ключей одновременно – это пространство имён. Для их завершения вам просто нужно изменить пространство имен:

    Скажем, у вас есть группа ключей «article_3_1», «article_3_2», …. Вы можете хранить их следующим образом:

    Выполните их так:

    И исчерпайте их все, просто увеличив пространство имен:

    Хотя документы говорят, что APCIterator доступен в apc> = 3.1.1, я нахожусь в нескольких системах, которые утверждают, что имеют apc 3.1.9, но нет APCIterator. Если у вас нет APCIterator в вашем распоряжении, дайте что-то вроде этого вихрем:

    В этом примере мы проверяем префикс в ключе, но вы можете использовать preg_match et. al и достичь чего-то более близкого к тому, что предоставляет APCIterator.

    Существует способ извлечь все ключи из memcache, но это очень дорого.

    Если есть возможность использовать альтернативы для memcached, scache поддерживает структурированные пространства ключей . С его помощью вы можете хранить данные во вложенные пути:

    и в конечном итоге уничтожить данные, удалив родительский узел

    Существует APCIterator, который помогает вам искать ключи в APC. Выполните активацию APCIterator.

    APCIterator :: valid () означает, что есть ключи до итерации. APCIterator :: key () возвращает вам ключ apc. APCIterator :: next () перемещает позицию итератора в следующий элемент.

    Для memcache вы можете использовать Memcached и использовать метод getAllKeys

    Как отключить eAccelerator, OPcache или Xcache?

    eAccelerator

    Отключить полностью eAccelerator нельзя. К сожалению, внесение директив в php.ini также не поможет — большинство известных нам CMS смотрят на само наличие eAccelerator на сервере. Удалить eAccelerator тоже не представляется возможным — для части клиентов его наличие является необходимым.

    Если ваш проект работает некорректно с eAccelerator, в качестве решения проблемы мы рекомендуем использовать сборку PHP c OPcache или Xcache:

    OPcache и Xcache

    Отключение OPcache или Xcache происходит в конфигурационном файле php.ini.

    Откройте панель управления хостингом: Как открыть панель управления хостингом и следуйте дальнейшей инструкции для вашей панели управления:

    Перейдите в «Менеджер файлов», затем в каталог php-bin-php(версия_php)/ и измените права для файла php.ini на 600 или 644 (rw-r—r—). Изменить права на файл можно кликнув Атрибуты:

    Перейдите в раздел «Файлы», далее в папку php-bin:

    Кликните на строке рядом с названием файла php.ini и выберите Редактировать как текст или Редактировать как код:

    Обратите внимание: чтобы вы смогли внести изменения в файл, права на него должны стоять «rwx rw- rw-». Вы можете кликнуть по этой ссылке и изменить права, если у вас они отличаются (при изменении поставьте галочки в колонке «Запись»).

    В блоке «Файлы» нажмите Диспетчер файлов:

    Перейдите в домашний каталог:

    Перейдите в каталог php-bin:

    Кликните на строке с названием файла php.ini и нажмите Изменить:

    Запишите в файл строку, в зависимости от того, что именно вам необходимо отключить. Нажмите Сохраните изменения и закройте файл:

    PHP Performance Series: Caching Techniques

    Кеширование промежуточного кода (Opcode Caching)
    Кэширование кода это один из самых легких и эффективных путей увеличения производительности в PHP. Использовании данного вида кэширования позволит избавиться от большого количества неэффективностей, возникающих при процессе запуска выполнения кода. Кэширование кода сохраняет промежуточный код в памяти для того чтобы не компилировать PHP-код каждый раз при запуске файла.

    Существует множество библиотек для такого кэширования, например, APC, XCache, eAccelerator и Zend Platform.

    Кэширование промежуточного кода файлов
    Когда у нас есть большое количество кода и наш сервис отличается большой посещаемостью, скорее всего мы не будем ждать, когда каждый PHP-файл будет обработан при его вызове, логично в этом случае запустить некий скрипт перед выкладкой кода на сервера, который сразу создаст промежуточный код. Например, код такого скрипта может быть реализован так

    /**
    * Compile Files for APC
    * The function runs through each directory and
    * compiles each *.php file through apc_compile_file
    * param string $dir start directory
    * return void
    */
    function compile_files($dir)
    <
    $dirs = glob($dir. DIRECTORY_SEPARATOR. ‘*’, GLOB_ONLYDIR);
    if (is_array($dirs) && count($dirs) > 0)
    <
    while(list(,$v) = each($dirs))
    <
    compile_files($v);
    >
    >
    $files = glob($dir. DIRECTORY_SEPARATOR. ‘*.php’);
    if (is_array($files) && count($files) > 0)
    <
    while(list(,$v) = each($files))
    <
    apc_compile_file($v);
    >
    >
    >
    compile_files(‘/path/to/dir’);

    Кэширование переменных
    Большинство библиотек кэширования позволяет кэшировать значения переменных. Очень полезно сохранять значения конфигурации или данные, которые сложно вычислить (получить) и которые не меняются (возможно не меняются в течение некоторого времени, тогда на базе такого кэширования можно реализовать кэширование с устареванием, примечание переводчика).

    if (!$config = apc_fetch(‘config’))
    <
    require(‘/path/to/includes/config.php’);
    apc_store(‘config’, $config);
    >

    if (!$conf = apc_fetch(‘pbs_config’))
    <
    $conf = new Zend_Config_Xml(PB_PATH_CONF. ‘/base.xml’, ‘production’);
    apc_store(‘pbs_config’, $conf);
    >

    Concurrency Level: 5
    Time taken for tests: 30.33144 seconds
    Complete requests: 684
    Failed requests: 0
    Write errors: 0

    Concurrency Level: 5
    Time taken for tests: 30.12173 seconds
    Complete requests: 709
    Failed requests: 0
    Write errors: 0

    Как вы видите, мы получили около 3-4% в производительности, закэшировав значения конфигурационного файла. Существует много других мест, которые также можно оптимизировать, нахождение таких мест позволит увеличит количество обработанных запросов.

    Файловое кэширование результатов
    В некоторых случаях сервер обрабатывает запросы, результатом которых является одинаковый контент. Есть возможность закэшировать подобные вид контента (полностью или его часть)
    В данном тексте иллюстрируется пример на основе пакета Pear::Cache_Lite.

    Полное кэширование вывода
    Полное кэширование довольно тяжело выполнить на большинстве сайтов с постоянно обновляющимися данными из большого количества источников. Все это правда, однако, нет необходимости обновлять данные каждую секунду. Даже 5-10 минутная задержка при экстремально высокой загрузке сайта позволит вам увеличить производительность.
    Пример ниже, сохраняет слепок страницы для будущего использования. Такой подход может помочь большому количеству пользователей.
    Я не рекомендую использовать данное решение, но если вам нужно что-то быстрое, вы можете его использовать, рано или поздно вы увидите недостатки этого метода.
    The Bootstrap Cache Example:

    require(‘/path/to/pear/Cache/Lite/Output.php’);
    $options = array(
    ‘cacheDir’ => ‘/tmp/’,
    ‘lifeTime’ => 10
    );
    $cache = new Cache_Lite_Output($options);
    if (!($cache->start($_SERVER[‘REQUEST_URI’])))
    <
    require(‘/path/to/bootstrap.php’);
    $cache->end();
    >

    .htaccess
    php_value auto_prepend_file /path/to/cache_start.php
    php_value auto_append_file /path/to/cache_end.php
    cache_start.php
    require(‘Cache/Lite/Output.php’);

    $options = array(
    ‘cacheDir’ => ‘/tmp/’,
    ‘lifeTime’ => 10
    );
    $cache = new Cache_Lite_Output($options);
    if (($cache->start($_SERVER[‘REQUEST_URI’])))
    exit;

    Cache Lite делает большинство тяжелой работы такой как блокирование файла, решение как сохранять контент для различных параметров (в данном примере используется REQUEST URI). Вам также может быть необходимы значения $_POST, $_COOKIE и $_SESSION.

    Частичное кэширование
    Частичное кэширование это типичный путь оптимизации. Скорее всего на вашем сайте есть части, которые очень редко изменяются или не должны изменяться в реальном времени. Это именно тот случай, когда необходимо применять частичное кэширование и оно позволит вам увидеть приращение в производительности.
    Кэширование значения строк

    require(‘Cache/Lite.php’);
    $options = array(
    ‘cacheDir’ => ‘/tmp/’,
    ‘lifeTime’ => 3600 //1 hour
    );
    $cache = new Cache_Lite($options);
    if (!($categories = $cache->get(‘categories’)))
    <
    $rs = mysql_query(‘SELECT category_id, category_name FROM category’);
    $categories = ‘

    • ‘ .$row[‘category_name’]. ‘

    ‘;
    $cache->save($categories, ‘categories’);
    >
    echo $categories;

    require(‘Cache/Lite.php’);
    $options = array(
    ‘cacheDir’ => ‘/tmp/’,
    ‘lifeTime’ => 3600, //1 hour
    ‘automaticSerialization’ => true
    );
    $cache = new Cache_Lite($options);
    if (!($categories = $cache->get(‘categories’)))
    <
    $rs = mysql_query(‘SELECT category_id, category_name FROM category’);
    $categories = array();
    while($row = mysql_fetch_assoc($rs))
    <
    $categories[] = $row;
    >
    $cache->store($categories, ‘categories’);
    >
    var_dump($categories);

    Как вы видите, вы можете сохранять в кэше различные типы данных. Однако, использовать файловое кэширования я бы не рекомендовал для сохранения результатов запросов к базе данных.

    Кэширование в оперативной памяти
    Существует множетсво путей для того чтобы произвести кэширование в памяти: memcached, memory tables в базах данных, RAM disk и другие.
    Memcached
    С сайта memcache memcached это высокопроизводительная и распределенная кэширующая система, которая увеличивает скорость динамических веб-приложений путём снижения загрузки с базы данных.
    О чем это говорит, о том, что можно сохранить данные на одном сервере, к которому будут обращаться другие сервера, это не зависит от вашего веб-сервера (как в случае кеширования промежуточного кода), так как memcached – это демон, который в большинстве случаев используется для кэширования результатов запросов к базам данных.
    Пример работы с Memcache:

    $post_ ];
    $memcached = new Memcache;
    $memcached->connect(‘hostname’, 11211);
    if (!$row = $memcached->get(‘post_id_’. $post_id))
    <
    //yes this is safe, we type casted it already 😉
    $rs = mysql_query(‘SELECT * FROM post WHERE post_ > if ($rs && mysql_num_rows($rs) > 0)
    <
    $row = mysql_fetch_assoc($rs);
    // cache compressed for 1 hour
    $memcached->set(‘post_id_’. $post_id, $row, MEMCACHE_COMPRESSED, time() + 3600);
    >
    >
    var_dump($row);

    session.save_handler = memcache
    session.save_path = «tcp://hostname:11211»

    mount —bind -ttmpfs /path/to/site/tmp /path/to/site/tmp

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

    Надеюсь, что описанное выше было достаточно информативно. Здесь не описан весь потенциал кэширования, например использование кэширования в распределенных базах данных или использование Squid. В будущих статьях я опишу и это…

    Добавить комментарий