Что такое PHP OPcache
PHP OPcache ускоряет выполнение PHP-скриптов, сохраняя скомпилированный байт-код в разделяемой памяти. При повторных запросах PHP пропускает этапы парсинга и компиляции, что даёт прирост скорости от 2 до 10 раз. OPcache включён в PHP 5.5+ и поставляется вместе с PHP — никакой отдельной установки не требуется.
Проверка статуса OPcache
php -r "echo opcache_get_status() ? 'Enabled' : 'Disabled';"Или создайте файл /var/www/html/opcache-info.php:
<?php
$status = opcache_get_status();
echo "Memory used: " . round($status['memory_usage']['used_memory']/1024/1024) . " MB\n";
echo "Hit rate: " . round($status['opcache_statistics']['opcache_hit_rate'], 2) . "%\n";Включение и настройка OPcache
Откройте файл /etc/php/8.2/fpm/php.ini или создайте /etc/php/8.2/mods-available/opcache.ini:
opcache.enable=1
opcache.enable_cli=0
opcache.memory_consumption=256
opcache.interned_strings_buffer=16
opcache.max_accelerated_files=10000
opcache.revalidate_freq=60
opcache.validate_timestamps=1
opcache.save_comments=1
opcache.fast_shutdown=1Объяснение ключевых параметров
| Параметр | Значение | Описание |
|---|---|---|
memory_consumption | 128–512 МБ | Объём RAM под кэш байт-кода |
max_accelerated_files | 4000–100000 | Максимум кэшируемых файлов |
revalidate_freq | 0 (prod) / 2 (dev) | Частота проверки изменений файлов (сек) |
validate_timestamps | 0 (prod) / 1 (dev) | Проверять ли дату изменения файлов |
validate_timestamps=0 и revalidate_freq=0 — это максимальная скорость. После деплоя кода сбрасывайте кэш командой php -r "opcache_reset();" или перезагрузкой PHP-FPM.Оптимальные настройки для WordPress / Laravel
opcache.memory_consumption=256
opcache.max_accelerated_files=20000
opcache.revalidate_freq=0
opcache.validate_timestamps=0
opcache.interned_strings_buffer=16
opcache.jit=1255
opcache.jit_buffer_size=128MJIT-компиляция в PHP 8.x
PHP 8.0+ поддерживает JIT (Just-In-Time) компиляцию поверх OPcache. Для CPU-интенсивных задач (обработка изображений, криптография, научные вычисления) JIT даёт дополнительное ускорение:
opcache.jit=1255
opcache.jit_buffer_size=128MСброс кэша OPcache
# Через PHP CLI
php -r "opcache_reset();"
# Перезагрузка PHP-FPM
sudo systemctl reload php8.2-fpm
# Через wp-cli (для WordPress)
wp cache flush