Назначение: ускорения работы php приложений (особенно актуально при использовании фреймворка в контейнере)
Последовательность действий:
- Создать файл opcache.ini, с следующим содержанием:
[opcache] opcache.enable=1 ; 0 - будет проверяться каждый запрос ; 0 не имеет значение если opcache.validate_timestamps=0 (для настройки реального окружения) opcache.revalidate_freq=0 opcache.validate_timestamps=1 opcache.max_accelerated_files=10000 opcache.memory_consumption=192 opcache.max_wasted_percentage=10 opcache.interned_strings_buffer=16 opcache.fast_shutdown=1
- Добавить в файл конфигурации контейнера строки:
RUN docker-php-ext-install opcache COPY YOU_PATH_TO_FILE/opcache.ini /usr/local/etc/php/conf.d/opcache.ini
Вместо YOU_PATH_TO_FILE использовать путь к ранее созданному файлу с настройками (для Windows этот путь должен быть относительно настроенной общей папки)
Настройка OPcache с помощью конфигурации в контейнере
- Изменить содержимое файла opcache.ini на:
[opcache] opcache.enable=1 opcache.revalidate_freq=0 opcache.validate_timestamps=${PHP_OPCACHE_VALIDATE_TIMESTAMPS} opcache.max_accelerated_files=${PHP_OPCACHE_MAX_ACCELERATED_FILES} opcache.memory_consumption=${PHP_OPCACHE_MEMORY_CONSUMPTION} opcache.max_wasted_percentage=${PHP_OPCACHE_MAX_WASTED_PERCENTAGE} opcache.interned_strings_buffer=16 opcache.fast_shutdown=1
- Добавить в файл конфигурации контейнера строки с настройкой окружения:
ENV PHP_OPCACHE_VALIDATE_TIMESTAMPS="0" \ PHP_OPCACHE_MAX_ACCELERATED_FILES="10000" \ PHP_OPCACHE_MEMORY_CONSUMPTION="192" \ PHP_OPCACHE_MAX_WASTED_PERCENTAGE="10" RUN docker-php-ext-install opcache COPY YOU_PATH_TO_FILE/opcache.ini /usr/local/etc/php/conf.d/opcache.ini
- В docker-compose.yaml добавить
environment: - PHP_OPCACHE_VALIDATE_TIMESTAMPS=1
(Если не используется docker compose, то заменить
PHP_OPCACHE_VALIDATE_TIMESTAMPS="0"
на:
PHP_OPCACHE_VALIDATE_TIMESTAMPS="1"
Дополнительный тюнинг OPcache
opcache.revalidate_freq [ int ] — срок нахождения кода в кэше (в секундах), до проверки изменения кода. 0 — код будет проверяться при каждом запросе (будет производиться много системных вызовов для этой проверки), стоит использовать при разработке. Не актуально для реального окружения.
opcache.validate_timestamps [ bool ] — когда включено (=1), временная метка файла будет проверяться с частотой opcache.revalidate_freq. Когда выключена (=0), opcache.revaliate_freq игнорируется и код не проверяется на изменения (даже если код изменился, изменения не будут применены до перезапуска php (SIGUSR2)).
Настройку удобно использовать когда обновляется код, так как в процессе обновления могут перекомпоноваться файлы, что может привести к непредсказуемому результату.
opcache.max_accelerated_files [ int ] — количество файлов, одновременно хранящихся в памяти. Важно задавать настройку большую чем количество файлов кодовой базе.
opcache.memory_consumption [ int ] — размер разделяемой памяти в мегабайта. Большее значение следует устанавливать если много кода. Функция opcachegetstatus() позволяет узнать сколько памяти потребляет opcache.
opcache.interned_strings_buffer [ int ] — PHP использует метод, называемый интернированием строк, для повышения производительности (если в коде есть строка «some value» используется несколько раз, внутри PHP сохранит одну неизменяемую переменную для этой строки (при первом обнаружении), а при дальнейшем обнаружении будет использовать указатель на нее). С помощью этого параметра, вместо того, чтобы иметь пул неизменяемых строк для каждого процесса php-fpm, этот параметр использует его для ВСЕХ процессов php-fpm. Это экономит память и повышает производительность, особенно в больших приложениях. Значение устанавливается в мегабайтах, по умолчанию — 4 МБ.
opcache.fast_shutdown [ bool ] — обеспечивает более быстрый механизм вызова деструкторов в вашем коде в конце одного запроса, чтобы ускорить ответ и повторно использовать php-воркеры, чтобы они быстрее были готовы к следующему входящему запросу.