Повышение производительности PHP с OPCache
Включённый в PHP в качестве расширения, OPCache хранит предварительно скомпилированный байткод скриптов в общей памяти. Это избавляет PHP от необходимости загружать и разбирать скрипты при каждом запросе, значительно снижая накладные расходы на выполнение и улучшая время отклика сервера. Это не только повышает удобство работы пользователей, но и снижает нагрузку на сервер, позволяя обрабатывать больше запросов одновременно. Преимущества OPCache особенно заметны в средах с высоким трафиком, где производительность и эффективность имеют решающее значение.
Установка расширения OPCache
Убедитесь, что OPCache установлен на сервере. Это можно проверить, просмотрев список всех установленных модулей для PHP:
php --modules
Если оно ещё не установлено, выполните команду установки расширения OPCache:
sudo apt install php8.x-opcache
Замените php8.x-opcache
на соответствующую версию, которую используете, например php8.3-opcache
.
Настройка расширения OPCache
Настройка OPCache через файл php.ini
довольно проста. Начните с поиска файла php.ini
, являющегося основным конфигурационным файлом для PHP. Расположение этого файла может зависеть от настроек сервера. Его расположение можно определить, выполнив команду:
php --ini
В нашем случае файл находится в следующем каталоге: /etc/php/8.3/cli/php.ini
.
В качестве альтернативы, вместо редактирования файла php.ini
, можно создать отдельный конфигурационный файл для настроек OPCache, что часто делается для упорядочивания конфигураций. Создайте новый файл с именем 10-opcache.ini
(номер гарантирует, что он будет загружен в правильном порядке) в каталоге конфигурации PHP.
В нашем случае файл находится в следующей директории: /etc/php/8.3/cli/conf.d/10-opcache.ini
Вот пример, как должен выглядеть файл конфигурации OPCache.
[opcache]
zend_extension=opcache.so
opcache.enable=1
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=10000
opcache.revalidate_freq=2
opcache.fast_shutdown=1
opcache.enable_cli=1
opcache.jit=off
Значения конфигурации — это параметры, управляющие работой расширения OPCache в PHP. Настройка таких параметров, как объем памяти, выделяемой OPCache, и частота проверок кэша, позволяет точно настроить его под конкретные нужды. Ниже приведено объяснение наиболее важных и часто используемых директив конфигурации OPCache:
zend_extension
: Эта директива включает расширение OPCache. Обычно оно добавляется автоматически при установке OPCache, но необходимо убедиться, что оно присутствует.opcache.enable
: Этот параметр включает или отключает расширение OPCache. Значение1
включает OPCache, а0
отключает его.opcache.memory_consumption
: Эта директива задаёт объем памяти (в мегабайтах), выделяемой OPCache для хранения предварительно скомпилированного байткода скриптов. Настройте это значение в зависимости от объёма памяти, доступной на сервере, и размера приложения.opcache.interned_strings_buffer
: Устанавливает объем памяти (в мегабайтах), выделенный для внутренних строк в OPCache. Внутренние строки — это строки, используемые PHP для экономии памяти. Увеличение этого параметра может повысить производительность, если приложение использует большое количество строк.opcache.max_accelerated_files
: Этот параметр определяет максимальное количество PHP-файлов, которые могут быть кэшированы OPCache. Увеличьте это значение, если приложение содержит большое количество PHP-файлов.opcache.revalidate_freq
: Эта директива задаёт частоту (в секундах), с которой OPCache проверяет обновления скриптов. Установка значения0
означает, что OPCache будет проверять обновления при каждом запросе, что удобно для разработки, но в продакшене следует установить более высокое значение.opcache.fast_shutdown
: Включение быстрого отключения позволяет OPCache использовать более быстрый механизм для освобождения памяти, что может повысить производительность.opcache.enable_cli
: Этот параметр включает OPCache для PHP CLI (интерфейс командной строки). Это удобно для скриптов, запускаемых из командной строки, которые могут выиграть от кэширования.opcache.validate_timestamps
: Если эта опция включена (1
), OPCache будет проверять временные метки скриптов, чтобы определить, были ли они обновлены. Отключение этого параметра (0
) может повысить производительность, но делать это следует только в том случае, если скрипты никогда не меняются.opcache.file_cache
: Этот параметр задаёт каталог для хранения на диске предварительно скомпилированного байткода сценариев. Это может быть необходимо, если требуется сохранять кэш между перезагрузками сервера.opcache.file_update_protection
: Эта директива задаёт время (в секундах), которое должно пройти, чтобы файл после обновления стал пригодным для кэширования. Это позволяет предотвратить проблемы с кэшированием, связанные с одновременным обновлением.opcache.max_wasted_percentage
: Здесь указывается процентпотраченной впустую
памяти (памяти, не используемой для активных скриптов), допустимый перед попыткой перезапуска OPCache. Установка этого параметра помогает эффективно управлять использованием памяти.
Применение конфигурации OPCache
После внесения этих изменений необходимо перезапустить веб-сервер, чтобы новые настройки вступили в силу.
Для перезапуска веб-сервера Apache выполните:
sudo systemctl restart apache2
Для перезапуска веб-сервера Nginx с PHP-FPM выполните:
sudo systemctl restart php8.x-fpm
sudo systemctl restart nginx
Замените php8.x-fpm
на соответствующую версию, которую используете, например php8.3-fpm
.
Очистка OPCache
Чтобы очистить OPCache в PHP, можно воспользоваться одним из следующих методов:
- Перезапустите PHP: Простой способ очистить OPCache — перезапустить процесс PHP или веб-сервер. Это очистит весь OPCache, гарантируя, что весь кэшированный байткод будет аннулирован.
- Использование PHP-скрипта: Можно создать PHP-скрипт, специально предназначенный для очистки OPCache, и выполнить его через командную строку или веб-запрос. Вот простой пример скрипта:
opcache_reset();
echo 'OPCache flushed successfully.'; - Использование панели управления OPCache (графический интерфейс OPCache): Если у установлена и настроена панель управления OPCache, можно использовать её интерфейс для очистки OPCache. Это более удобный подход и позволяет получить дополнительные сведения об использовании и производительности OPCache.
Выберите метод, который лучше всего соответствует вашему рабочему процессу и требованиям.
Заключение
OPCache необходим всем, кто стремится повысить производительность PHP-приложений. Храня в памяти предварительно скомпилированный байткод скриптов, OPCache сокращает время выполнения и нагрузку на сервер, значительно повышая скорость и эффективность работы веб-приложений. Правильная настройка OPCache обеспечивает плавную работу приложения, лучший пользовательский опыт и надёжную среду для обработки трафика.