Если ваш PHP-сайт работает медленно, а сервер постоянно перегружен, возможно, вы упускаете один из самых мощных инструментов оптимизации — OPcache. Эта встроенная в PHP функция кэширования байт-кода способна ускорить выполнение скриптов в 2-5 раз, но большинство разработчиков используют её с настройками по умолчанию, оставляя на столе огромный потенциал производительности. Давайте разберёмся, как правильно настроить OPcache для вашего проекта.
Что такое OPcache и почему он важен?
OPcache — это система кэширования байт-кода, встроенная в PHP начиная с версии 5.5. Когда PHP выполняет скрипт, он сначала компилирует его в байт-код (промежуточное представление), а затем выполняет. Без OPcache эта компиляция происходит при каждом запросе, что создаёт значительную нагрузку на CPU. OPcache сохраняет скомпилированный байт-код в оперативной памяти, позволяя повторно использовать его для последующих запросов.
На сайтах с высоким трафиком OPcache может снизить использование CPU на 50-70%, что напрямую влияет на стоимость хостинга и отзывчивость сайта.
Основные директивы конфигурации
Настройка OPcache происходит через файл php.ini. Вот ключевые параметры, которые нужно понимать:
Базовые настройки памяти
- opcache.memory_consumption — объём памяти (в МБ) для хранения байт-кода. Рекомендуется 128-256 МБ для средних проектов.
- opcache.interned_strings_buffer — память для интернированных строк (4-16 МБ).
- opcache.max_accelerated_files — максимальное количество файлов в кэше (10000-40000).
Настройки валидации
- opcache.validate_timestamps — проверять ли изменения файлов (1 для разработки, 0 для продакшена).
- opcache.revalidate_freq — как часто проверять изменения (в секундах).
- opcache.revalidate_path — учитывать полные пути к файлам.
Оптимальная конфигурация для продакшена
Для рабочего сервера рекомендуется следующая конфигурация:
Перед применением этих настроек убедитесь, что у вас есть процесс развёртывания, который очищает OPcache при обновлении кода.
opcache.enable=1 opcache.memory_consumption=256 opcache.interned_strings_buffer=16 opcache.max_accelerated_files=20000 opcache.validate_timestamps=0 opcache.save_comments=1 opcache.fast_shutdown=1 opcache.enable_cli=0
Мониторинг и отладка
Для проверки состояния OPcache используйте функцию opcache_get_status() или готовые решения вроде OPcache Dashboard. Ключевые метрики для отслеживания:
- Hit rate — процент попаданий в кэш (должен быть >90%)
- Used memory — сколько памяти занято
- Cached scripts — количество закэшированных файлов
- Restarts — перезапуски кэша (не должно быть много)
Распространённые проблемы и решения
Кэш заполняется слишком быстро
Увеличьте opcache.memory_consumption и opcache.max_accelerated_files. Проверьте, не кэшируются ли ненужные файлы (логи, тестовые скрипты).
Сайт не обновляется после деплоя
При opcache.validate_timestamps=0 нужно очищать кэш вручную через opcache_reset() или перезапускать PHP-FPM.
Интеграция с системами развёртывания
Добавьте очистку OPcache в ваш деплой-скрипт:
// После обновления кода opcache_reset(); // Или через CLI php -r "opcache_reset();"
FAQ
Как проверить, включён ли OPcache?
Создайте файл phpinfo.php с содержимым <?php phpinfo(); ?> и найдите раздел "Zend OPcache".
Какая версия PHP лучше всего работает с OPcache?
PHP 7.2 и выше имеют наиболее оптимизированную реализацию OPcache с улучшенной производительностью.
Нужно ли очищать OPcache при обновлении WordPress?
Да, большинство плагинов для кэширования WordPress автоматически очищают OPcache при обновлении ядра, плагинов или тем.
Можно ли использовать OPcache на shared-хостинге?
Обычно да, но настройки могут быть ограничены провайдером. Уточняйте в технической поддержке.
Какой размер памяти оптимален для OPcache?
Начните с 128 МБ и увеличивайте, если видите, что кэш заполняется. Для крупных проектов может потребоваться 512 МБ и более.