Используем OPCache для повышения производительности PHP на веб сервере

Zend Opcache – это расширение PHP, предназначенное для повышения производительности PHP, сокращения времени загрузки веб-страниц и уменьшения нагрузки на сервере.

Производительность достигается путем компиляции кода PHP файлов при первом обращении к ним. В результате при следующем доступе сервер не тратит ресурсы на повторное чтение и компиляцию php файла, а отдает готовый результат из кэша opcache. Т.е. opcache дает хорошие результаты для cms/файлов php скриптов, код которых редко изменяется.

В данной статье мы рассмотрим установку расширения OPcache, его настройку и использование с веб-сервером apache на примере Linux CentOS.

Содержание:

  • Установка расширения OPcache
  • Настройка параметров OPcache в конфигурационном файле
  • Сравнение производительности популярных CMS при использовании OPcache

Установка расширения OPcache

Перед установкой самого расширения, нужно подключить репозитории EPEL и remi, а затем обновить пакеты на сервере с помощью yum (dnf):

# dnf install epel-release -y
# dnf install https://rpms. remirepo.net/enterprise/remi-release-8.rpm -y
# dnf update -y

Теперь можно установить opcahce для php:

# dnf install php-opcache -y

На этом установка расширения OPcache завершена.

Настройка параметров OPcache в конфигурационном файле

Конфигурационный файл OPCache находится в директории /etc/php.d. Откройте его и очистите от стандартных записей:

# nano /etc/php.d/10-opcache.ini

Добавьте следующие универсальные настройки, которые подходят для большинства php проектов:

zend_extension=opcache.so
opcache.enable=1
opcache.memory_consumption=512
opcache.interned_strings_buffer=512
opcache.max_accelerated_files=100000
opcache.max_wasted_percentage=1
opcache.validate_timestamps=1
opcache.revalidate_freq=0
opcache.fast_shutdown=1
opcache.save_comments=1
opcache.load_comments=1
opcache.blacklist_filename=/etc/php.d/opcache*.
blacklist

После сохранения файла php.d перезапустите веб-сервера. В моем случае это apache:

# service httpd restart

Проверьт, что модуль Zend OPcache Engine подключён:

# php -v

Модуль успешно подключен. Рассмотрим опции, которые мы исопльзовали в конфигурационном файле:

  • zend_extension=opcache.so – подключение модуля расширения
  • opcache.enable=1
    — включение/отключение OPcache
  • opcache.memory_consumption=512 – размер памяти для хранения кэша
  • opcache.interned_strings_buffer=512 — размер памяти для пула строк
  • opcache.max_accelerated_files=100000 — максимальное количество ключей в хэн-таблице OPcache
  • opcache.max_wasted_percentage=1 – максимальный процент потерянной памяти, после которой планируется перезапуск
  • opcache.validate_timestamps=1 — включение возможности обнуления вручную или рестартом веб-сервера(регулируется opcache. validate_timestamps)
  • opcache.revalidate_freq=0
    — промежуток, через который будет выполнена проверка изменения временных меток, для поддержания актуальности данных, 0 — постоянная проверка, любое другое значение количество секунд
  • opcache.fast_shutdown=1 — если параметр включен, то будет использована быстрая последовательность перезагрузки, при которой не происходит очистки всех выделенных блоков памяти.
  • opcache.save_comments=1 — если выключено, все комментарии будут отброшены из кеша опкодов для минимизации размера кода.
  • opcache.load_comments=1 — если выключено, то комментарии PHPDoc не будут загружаться из общей памяти.
  • opcache.blacklist_filename=/etc/php.d/opcache*.blacklist
    — местоположение списка php файлов, который OPcache должен пропускать. Файл содержит имена файлов, которые не нужно оптимизировать, по одной записи на строку. Допустимы шаблоны поиска и префиксы. Строки, начинающиеся с точки с запятой игнорируются

Более детальную настройку можно выполнить согласно официальной документации по OPcache.

Сравнение производительности популярных CMS при использовании OPcache

Использование OPcache на сервере обеспечит экономию ресурсов и сократит время загрузки страниц сайта, но есть и другие факторы по которым важно использовать данное расширение:

  • Многие поисковые системы отдают предпочтение сайтам, с более быстрой загрузкой;
  • Быстрый отклик сайта сокращает число отказов. Посетители сайта охотнее задерживаются на таких сайтах;
  • Увеличение конверсии, за счет высокой производительности сервера;
  • Сокращение расходом на оборудование (из-за экономии ресурсов сервера).

В работе с различными CMS, мы заметили, что почти с любым сайтом, можно добиться хорошего результата в производительности: Использование памяти и время загрузки популярных CMS сокращается в 2-3 раза.

А если речь идет о CMS Bitrix, то ее разработчики настоятельно рекомендуют подключение данного расширения и при замерах производительности, тест сразу показывает, подключен у вас OPcache или нет.

Экспериментируйте с настройками Opcache, уменьшая или увеличивая различные параметры, выполните тонкую настройку для своего сайта исходя из ресурсов сервера, тем самым вы добьетесь отличных результатов в производительности. Модуль Opcache также можно использовать в связке NGINX + PHP-FPM.

Установка и настройка PHP OPcache

Как увеличить производительность сервера на ОС CentOS. Часть вторая : Установка прекомпилятора PHP Zend OPcache.

В данной статье мы расскажем, как увеличить производительность виртуального сервера VPS на ОС CentOS путем установки прекомпилятора PHP Zend OPcache. Материал ориентирован на пользователей с небольшим багажом знаний в области администрирования, мы рассмотрим самые простые, и в тоже время действенные, способы повышения производительности сервера.

Установка прекомпилятора PHP Zend OPcache.

Прекомпилятор (кешер, акселератор) PHP ускоряет работу сайтов за счет кеширования скриптов PHP. На момент написания статьи, наиболее популярный и производительный прекомпилятор PHP – Zend OPcache, рассмотрим способы его установки на сервер.

Установка Zend OPcache через панель управления возможна, но практически никогда не выполняется корректно. Поэтому мы рекомендуем установить расширение из командной строки.

Установка Zend OPcache на сервер с любой панелью управления.

Вам понадобится SSH доступ к серверу и SSH клиент. Если на Вашем ПК установлена операционная система Linux — SSH клиент Вам не нужен, можете использовать для подключения по SSH стандартный Linux терминал. Владельцам компьютеров с ОС Windows мы рекомендуем использовать SSH\Telnet клиент Putty. Данная программа бесплатна и проста в использовании.

Скачать последнюю версию с официального сайта можете по ссылке.

Подключитесь к Вашему серверу по SSH от имени суперпользователя root или другого пользователя с аналогичными привилегиями.

Добавьте репозиторий remi. Чтобы добавить репозиторий remi на CentOS 6 используйте следующие команды :

wget http://rpms.famillecollet.com/enterprise/remi-release-6.rpmsudo rpm -Uvh remi-release-6*. rpm

Для установки репозитория remi на CentOS 7 используйте такие команды :

wget http://rpms.famillecollet.com/enterprise/remi-release-7.rpmsudo rpm -Uvh remi-release-7*.rpm

Проверьте текущую версию PHP с помощью команды:php -v

Для версии PHP 5.4 используйте такую команду :

yum install --enablerepo=remi php-pecl-zendopcache

Для версии 5.5, используйте команду :

yum install --enablerepo=remi-php55 php-pecl-zendopcache

Для версии 5.6, используйте команду :

yum install --enablerepo=remi-php56 php-pecl-zendopcache

Для установки opcache на PHP 7 используйте такую команду :

yum install --enablerepo=remi-php70 php-pecl-zendopcache

После установки дополнения перезагрузите веб сервер. Для этого используйте команду :

service httpd restart

Если на Вашем сервере нет httpd – скорее всего работает связка Nginx + PHP-FPM, тогда перезагрузите PHP-FPM :

service php-fpm restart

После перезагрузки можете проверить корректность установки дополнения с помощью команды :

php -m

Если Opcache установлен корректно – под списком расширений Вы увидите подобные строки :

Zend Engine v2. 5.0, Copyright (c) 1998-2014 Zend Technologies with Zend OPcache v7.0.3, Copyright (c) 1999-2014, by Zend TechnologiesС другими материалами по оптимизации настроек сервера можете ознакомиться по ссылкам :

Как увеличить производительность сервера на ОС CentOS. Часть первая : Установка Nginx.

Как увеличить производительность сервера на ОС CentOS. Часть третья : Быстрая оптимизация настроек веб сервера.

Если у Вас возникнут трудности в настройке – всегда можете обратиться в нашу службу технической поддержки. Открыть тикет можете здесь.

Что такое OPcache и как его использовать?

Вы можете ускорить свой сайт WordPress примерно в три или более раз с помощью системы кэширования OPcode PHP OPcache.

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

Вот более подробная информация об OPcache и о том, как установить его для вашего сайта WordPress, чтобы ускорить его работу.

Что такое кэширование?

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

Этот процесс означает, что кешированный контент отображается намного быстрее, чем если бы он загружался непосредственно с сервера.

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

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

В результате веб-сайт WordPress загружается быстрее.

Существуют также различные типы кэширования, такие как кэширование браузера, сайта, объекта и OPcode. Рекомендуется реализовать более одного типа, чтобы повысить производительность вашего сайта.

Для получения дополнительной информации вы также можете проверить эти ресурсы:

  • Кэширование для WordPress, объяснение простым языком
  • Кэш браузера и файлы cookie: в чем разница?
  • Что такое кэширование объектов и как его использовать с WordPress

Что такое OPcache или кэширование кода операции PHP?

OPcache — это тип кэширования OPcode . Этот тип кэширования компилирует удобочитаемый PHP-код в код, понятный вашему серверу, который называется кодом операции. Это происходит, когда файл PHP загружается на веб-страницу в первый раз. Затем он сохраняется в памяти сервера для более быстрой загрузки при каждом последующем посещении страницы.

Механизмы кэширования байт-кода, такие как OPcache, APC и Xcache, завершают этот процесс при первом выполнении файла PHP без необходимости выполнять его во второй или третий раз.

Как работает кэширование кода операции PHP

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

Затем скрипт компилируется в код операции, что делает файл доступным для чтения сервером. После этого код операции сохраняется в памяти сервера.

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

С другой стороны, если скрипт загружается на страницу, а кеш проверяется на код операции и находит его, то он загружается с разделением по времени.

Когда PHP-скрипты не находятся в кеше, они кэшируются для последующих загрузок страниц.

Различия между кэшами OPcache и APC

OPcache, APC и Xcache — это системы кэширования кодов операций. Раньше OPcache принадлежал Zend, а Alternative PHP Cache (APC) был бесплатным расширением с открытым исходным кодом для PHP. Xcache также был альтернативным вариантом.

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

К счастью, Zend сделал исходный код OPcache открытым и доступным в качестве расширения, начиная с версии PHP 5.5. В более ранних версиях у вас есть возможность использовать APC или OPcache, но если вы хотите использовать последний, вам необходимо установить его вручную.

Xcache, с другой стороны, является хорошей альтернативой OPcache в качестве ускорителя PHP.

Ускорит ли OPcache мой сайт WordPress?

Все три варианта подходят для WordPress, но рекомендуемый вариант для PHP версии 5.5 и выше — OPcache. В среднем это ускоряет WordPress в три раза, по крайней мере, для средних и крупных сайтов.

Если у вас небольшой сайт без множества дополнительных PHP-скриптов или плагинов, вы, скорее всего, не заметите большой разницы.

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

Как установить OPcache на ваш сервер

Если у вас PHP версии 5.5 и выше , кэширование кода операции OPcache PHP установлено и включено по умолчанию. Вам не нужно делать ничего другого. Также нет никаких дополнительных требований или конфигураций, необходимых для его запуска.

Вот почему вы не найдете никаких вариантов, если будете их искать.

Подробнее см. в статье Почему вам нужно обновиться до PHP 7+ как можно скорее. (и как это сделать прямо сейчас)

Согласно руководству по PHP:

«OPcache может быть скомпилирован только как общее расширение. Если вы отключили сборку расширений по умолчанию с помощью –disable-all , вы должны скомпилировать PHP с параметром –enable-opcache , чтобы OPcache был доступен.
После компиляции вы можете использовать директиву конфигурации zend_extension для загрузки расширения кэширования кода операции PHP OPcache в PHP. Это можно сделать с помощью zend_extension=/full/path/to/opcache.so на платформах, отличных от Windows, и zend_extension=C:\path\to\php_opcache.dll в Windows».

После этого перезапустите PHP с помощью SSH.

В Apache введите команду ниже, чтобы перезапустить PHP.

Для Nginx введите следующее:

Как установить OPcache в более ранних версиях

Если ваш сервер работает на PHP версий 5.2, 5.3 или 5.4, вы можете вручную установить OPcache с помощью команды PECL ниже:

Далее перейдите вам php. ini файл:

Вам необходимо обновить файл php.ini со следующими рекомендуемыми настройками:

Вы часто можете найти файл php.ini в файловой системе папок вашего сайта. Если вы не знаете, как его найти, обратитесь к своему хостинг-провайдеру.

Подведение итогов

У многих владельцев сайтов WordPress может быть уже установлена ​​последняя версия PHP. Это означает, что они уже автоматически включили OPcache, чтобы значительно ускорить загрузку страниц своего сайта.

Для тех, у кого установлена ​​версия PHP с 5.2 по 5.4, вы можете вручную установить OPcache, выполнив действия, описанные выше.

У вас установлена ​​последняя версия PHP? У вас есть вопросы о кэшировании кода операции OPcache/PHP? Дайте нам знать в комментариях ниже.

OPcache и OPcache с настройками производительности

16 января 2023 г. by Hayden James , in Blog Linux

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

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

 

Сегодня я провел несколько быстрых тестов, зафиксировав данные второго запуска тестов. Во-первых, на VPS с 32 ГБ/16 ядрами ЦП (Ubuntu 16.04 LTS), который показал ниже 90 035 PHP7 + OPcache по сравнению с PHP7 + OPcache + Tweaks

 эталический график с использованием Apache Bench (ab):

Затем я также протестировал VPS с ядром 1 ГБ / 1, и результат:

.

Кроме того, хотя OPcache работает независимо от используемого обработчика PHP, я хотел убедиться, что результаты будут одинаковыми с PHP-FPM. Поэтому я изменил значение по умолчанию mpm_prefork на mpm_event (подробнее о mpm_event: Упростите Apache для повышения производительности и эффективности использования памяти) и заменили  mod_PHP на PHP-FPM на том же VPS с 1 ГБ/1 ядром ЦП:

Это не умопомрачительные результаты.

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

opcache.validate_timestamps=0

(по умолчанию включено «1») Если включено, OPcache будет проверять наличие обновленных скриптов каждые opcache.revalidate_freq=# секунд. Когда отключено, opcache.revalidate_freq игнорируется, и вы должны сбросить OPcache вручную с помощью opcache_reset(), opcache_invalidate() или перезапустив PHP, чтобы изменения в файловой системе вступили в силу.

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

Если вам нужно оставить его включенным, см. конец этого сообщения

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

opcache.file_update_protection=0

(по умолчанию «2») Предотвращает кэширование файлов, возраст которых меньше указанного количества секунд. Защищает от кэширования не полностью обновленных файлов. Вы можете увеличить производительность, установив для этого параметра значение «0». Документация ограничена.

opcache.fast_shutdown=1

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

Вместо этого он полагается на диспетчер памяти Zend Engine для массового освобождения всего набора переменных запроса. Используйте это с PHP7+. Вы можете столкнуться с ошибками сегментации в старых версиях PHP.

PHP 8  Советы по повышению производительности.

Также см. Проверка совместимости и советы по производительности PHP 8.

 

Вот копия конфигурации (opcache.ini), которую я использовал…

PHP OPcache по умолчанию:

 zend_extension=opcache.so 

PHP OPcache + настройки:

 zend_extension=opcache.so
opcache.fast_shutdown=1
opcache.file_update_protection=0
opcache.validate_timestamps=0
opcache.interned_strings_buffer=16 

Пример команды:

 ab -n 1000 -c 20 -g opcache_yes.dat http://localhost/
Это ApacheBench, версия 2.3 <$Revision: 1706008 $>
Авторское право 1996 Адам Твисс, Zeus Technology Ltd, http://www. zeustech.net/
Лицензия предоставлена ​​Apache Software Foundation, http://www.apache.org/

Бенчмаркинг localhost (наберитесь терпения)
Выполнено 100 запросов
Выполнено 200 запросов
Выполнено 300 запросов
Выполнено 400 запросов
Выполнено 500 запросов
Выполнено 600 запросов
Выполнено 700 запросов
Выполнено 800 запросов
Выполнено 900 запросов
Выполнено 1000 запросов
Выполнено 1000 запросов

Серверное ПО: Apache/2.4.18
Имя хоста сервера: localhost
Порт сервера: 80

Путь к документу: /
Длина документа: 51919 байт

Уровень параллелизма: 20
Время, затраченное на тесты: 1,815 секунды
Полные запросы: 1000
Неудачные запросы: 0
Всего передано: 52154000 байт
Передано HTML: 51919000 байт
Запросов в секунду: 551,08 [#/сек] (среднее)
Время на запрос: 36,292 [мс] (среднее)
Время на запрос: 1,815 [мс] (в среднем по всем одновременным запросам)
Скорость передачи: получено 28067,40 [Кбайт/сек]

Время соединения (мс)
 мин. среднее[+/-sd] медиана макс.
Подключить: 0 0 0,1 0 0
Обработка: 1936 5,6 35 66
Ожидание: 17 33 5,4 33 62
Итого: 19 36 5,6 35 66

Процент запросов, обслуженных за определенное время (мс)
 50% 35
 66% 37
 75% 39
 80% 40
 90% 43
 95% 46
 98% 51
 99% 53
 100% 66 (самый длинный запрос) 

Если вам интересно, откуда столько шума вокруг PHP Opcache, вот сравнение PHP 7 без OPcache и PHP 7 + OPcache (параллелизм снижен до 2, поскольку без OPcache PHP терпит неудачу в 90 % запросов).