- Настройка PHP OPcache для оптимизация работы сайта
- Включить JIT в PHP 8
- Опции OPcache
- Похожие записи:
- Используем OPCache для повышения производительности PHP на веб сервере
- Установка расширения OPcache
- Настройка параметров OPcache в конфигурационном файле
- Сравнение производительности популярных CMS при использовании OPcache
Настройка PHP OPcache для оптимизация работы сайта
Zend OPcache — PHP-акселератор, обеспечивает ускорение выполнения PHP кода благодаря кэшированию и оптимизации, сохраняет скомпилированный байт-код в разделяемой памяти.
Opcache позволяет значительно ускорить скорость генерации страниц.
OPcache включен по умолчанию начиная с PHP 5.5
Создадим файл конфигурации OPcache:
echo > /etc/php.d/10-opcache.ini
и добавим в него конфиг (пример конфигурации)
Не стоит использовать готовые конфигурации найденные в интернете. Это может привести к остановке работы сайта. Подбирайте индивидуально.
zend_extension=opcache.so opcache.enable=1 opcache.memory_consumption=512 opcache.interned_strings_buffer=32 opcache.max_accelerated_files=130987 opcache.max_wasted_percentage=5 opcache.use_cwd=1 opcache.validate_timestamps=1 opcache.revalidate_path=1 opcache.enable_file_override=1 opcache.fast_shutdown=1 opcache.save_comments=1 opcache.load_comments=1
После чего необходимо перезапустить веб сервер, в данном случае apache
Включить JIT в PHP 8
Компилятор JIT (Just In Time) в PHP 8 реализован как часть расширения Opcache и призван компилировать операционный код в инструкции процессора в реальном времени. Что позволяет еще больше повысить производительность.
Для включения необходимо указать размер буфера opcache.jit_buffer_size, по умолчанию 0.
Добовляем в наш файл /etc/php.d/10-opcache.ini строку:
opcache.jit_buffer_size=128M
и перезапускаем веб сервер, это все что требуется.
Опции OPcache
Опция | По молчанию | Описание |
opcache.enable | 1 | включение/выключение OPcache |
opcache.enable_cli | 0 | включение OPcache при вызове PHP из командной строки |
opcache.memory_consumption | 64 | размер используемой памяти (в мб.) для хранения прекомпилированного PHP-кода |
opcache.interned_strings_buffer | 4 | количество памяти для пула строк в мегабайтах |
opcache.max_accelerated_files | 2000 | максимальное количество ключей в хэш-таблице OPcache, допустимы значения между 200 и 1000000 |
opcache.max_wasted_percentage | 5 | максимальный процент замусоренной памяти для запланированного перезапуска |
opcache.use_cwd | 1 | при включении добавляет текущую рабочую директорию в ключ скрипта для предотвращения возникновения колизий между файлами с одинаковым именем |
opcache.validate_timestamps | 1 | возможность обнуления OPcache вручную или перезапуском веб-сервера для того, чтобы привести в актуальное состояние данных об изменениях в файлах |
opcache.revalidate_freq | 2 | через какой промежуток времени (в секундах) проверять изменения временных меток для поддержания данных в памяти в актуальном состоянии, где 1 — проверка с периодичностью раз в секунду, 0 — постоянная проверка. |
opcache.file_update_protection | 2 | предотвращает кэширование файлов, которые были изменены меньше, чем в указанное время (в секундах) |
opcache.revalidate_path | включение или отключение оптимизации поиска файлов в include_path | |
opcache.save_comments | 1 | если выключено, все комментарии PHPDoc будут удалены из кода с целью уменьшения размера оптимизированного кода. |
opcache.load_comments | 1 | если выключено, то комментарии PHPDoc не будут загружаться из общей памяти |
opcache.fast_shutdown | 0 | если включено, будет использоваться последовательность быстрых выключений для оптимизированного кода |
opcache.enable_file_override | 0 | при включении OPcache будет проверять наличие закэшированного файла при вызовах file_exists(), is_file() и is_readable() |
opcache.optimization_level | 0xffffffff | битовая маска, в которой каждый бит включает или отключает в соответствующие проходы OPcache |
opcache.inherited_hack | 1 | включение этого хака при ошибках вида can’t redeclare class |
opcache.dups_fix | 0 | Необходимо включить при появлении ошибок вида Can’t redeclare class |
opcache.blacklist_filename | месторасположение списка файлов, к которым запрещен доступ для OPcache | |
opcache.max_file_size | 0 | указывает максимальный размер файла для кеширования, позволяет исключать большие файлы |
opcache.consistency_checks | 0 | проверять контрольную сумму кэша каждое N-ое количество запросов, подсчет контрольной суммы снижает производительность |
opcache.force_restart_timeout | 180 | время ожидания (в секундах) перед перезагрузкой в случае недоступности кэша |
opcache.error_log | определение названия и местоположения лога ошибок OPcache | |
opcache.log_verbosity_level | 1 | все ошибки OPcache отправляет в лог-файл веб-сервера. По умолчанию логируются только критические ошибки (0) и обычные ошибки (1). |
- disable — Полностью отключён, не может быть включён во время выполнения.
- off — Отключено, но может быть включено во время выполнения.
- tracing — Используйте трассировку JIT. Включено по умолчанию и рекомендуется для большинства пользователей.
- function — Использование функции JIT.
Похожие записи:
Используем OPCache для повышения производительности PHP на веб сервере
19.01.2021
VyacheslavK
CentOS, Linux
Комментариев пока нет
Zend Opcache – это расширение PHP, предназначенное для повышения производительности PHP, сокращения времени загрузки веб-страниц и уменьшения нагрузки на сервере.
Производительность достигается путем компиляции кода PHP файлов при первом обращении к ним. В результате при следующем доступе сервер не тратит ресурсы на повторное чтение и компиляцию php файла, а отдает готовый результат из кэша opcache. Т.е. opcache дает хорошие результаты для cms/файлов php скриптов, код которых редко изменяется.
В данной статье мы рассмотрим установку расширения OPcache, его настройку и использование с веб-сервером apache на примере Linux CentOS.
Установка расширения 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:
На этом установка расширения OPcache завершена.
Настройка параметров OPcache в конфигурационном файле
Конфигурационный файл OPCache находится в директории /etc/php.d. Откройте его и очистите от стандартных записей:
Добавьте следующие универсальные настройки, которые подходят для большинства 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:
Проверьт, что модуль Zend OPcache Engine подключён:
Модуль успешно подключен. Рассмотрим опции, которые мы исопльзовали в конфигурационном файле:
- 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.
Предыдущая статья Следующая статья