OPcache в PHP: что это и как настроить
OPcache хранит готовый к выполнению код скриптов PHP в памяти, чтобы не разбирать файлы при каждом запросе. В Ubuntu он включён для сайта и выключен для командной строки. Изменения в файлах он замечает в течение 2 секунд.
Содержание 6
Что сделать прямо сейчас
Команды вводятся на сервере: подключитесь к нему по SSH (как подключиться) и набирайте их в том же окне. Проверьте, работает ли OPcache для сайта:
ivan@myserver:~$ php-fpm8.3 -i | grep opcache.enable
opcache.enable => On => On
opcache.enable_cli => Off => Off
opcache.enable_file_override => Off => Offopcache.enable => On — OPcache для сайта включён, ничего делать не нужно. opcache.enable_cli => Off — для команды php в окне SSH он выключен, так и задумано. Команды — для PHP 8.3 из Ubuntu 24.04. В Ubuntu 26.04 стоит PHP 8.5: в путях и командах вместо 8.3 пишите 8.5. Какая версия у вас, покажет ls /etc/php/.
Как работает OPcache
Перед выполнением PHP переводит файл скрипта во внутренний код. Без OPcache это происходит при каждом запросе. С OPcache готовый код остаётся в памяти PHP-FPM, и следующий запрос берёт его оттуда.
| Настройка | В Ubuntu 24.04 | Что задаёт |
|---|---|---|
opcache.enable | On | OPcache для сайта |
opcache.enable_cli | Off | OPcache для команды php |
opcache.memory_consumption | 128 | сколько мегабайт памяти отдать под код |
opcache.max_accelerated_files | 10000 | сколько файлов может поместиться |
opcache.validate_timestamps | On | проверять, не изменились ли файлы |
opcache.revalidate_freq | 2 | через сколько секунд снова проверять файл |
Строка with Zend OPcache в ответе php -v значит, что модуль загружен. Работает ли он для сайта, показывает только opcache.enable.
Если сайт показывает старый код
- Подождите пару секунд и обновите страницу: OPcache проверяет файл с перерывом в 2 секунды.
- Проверьте проверку изменений:
php-fpm8.3 -i | grep validate_timestamps. Если там Off, OPcache не видит новых файлов, пока PHP-FPM не перезапустят:sudo systemctl restart php8.3-fpm. - Если и после перезапуска на странице старое — дело не в OPcache. Проверьте, в той ли папке вы меняли файлы: папку сайта задаёт строка root в настройках nginx. И обновите страницу без кеша браузера: Ctrl+F5, на Mac — Cmd+Shift+R.
Как поменять настройки
Настройки OPcache — в разделе [opcache] файла php.ini, все строки там закомментированы. memory_consumption и max_accelerated_files меняются только в php.ini.
- Откройте файл настроек PHP для сайта:
sudo nano /etc/php/8.3/fpm/php.ini. Если система спросит пароль, введите пароль своего пользователя на сервере. Символы при вводе не видны — наберите пароль и нажмите Enter. - Нажмите Ctrl+W, введите
opcache.memory_consumptionи нажмите Enter — курсор встанет на строку с этой настройкой. Если в начале строки стоит точка с запятой, удалите её: такая строка не действует. - Впишите новое значение:
opcache.memory_consumption=256. 256 — пример, число в мегабайтах. - Сохраните файл: Ctrl+O, Enter, затем Ctrl+X.
- Перезапустите PHP-FPM:
sudo systemctl restart php8.3-fpm. Если команда ничего не ответила, PHP перезапущен. - Проверьте значение:
php-fpm8.3 -i | grep opcache.memory_consumption.
Без перезапуска PHP-FPM настройки OPcache не меняются. Перезапуск заодно очищает кеш — так сбрасывают OPcache целиком.
Источники
- Справка PHP: настройки OPcache — opcache.validate_timestamps и opcache.revalidate_freq: проверять ли изменения файлов и через сколько секунд.
- Справка PHP: список настроек — значения по умолчанию и где можно менять каждую настройку: INI_ALL, INI_PERDIR или INI_SYSTEM.
- Файл php.ini-production из PHP 8.3.6 — значения для рабочих серверов: display_errors Off, log_errors On, max_execution_time 30, post_max_size 8M, upload_max_filesize 2M.
- Справка PHP: opcache_reset() — сбрасывает весь кеш OPcache.
Сверено 14 октября 2026 года.
Что почитать дальше
- Настройки PHPглавные настройки и где их задают.
- phpinfo()настройки, с которыми работает сайт.
- Процессы PHP-FPMpm, pm.max_children и память.