Поведение этих функций зависит от установок в php.ini.
Имя | По умолчанию | Место изменения | Список изменений |
---|---|---|---|
opcache.enable | "1" | INI_ALL |
|
opcache.enable_cli | "0" | INI_SYSTEM |
В версиях с PHP 7.1.2 по 7.1.6 включительно, значение по умолчанию "1" (включено) |
opcache.memory_consumption | "128" | INI_SYSTEM |
|
opcache.interned_strings_buffer | "8" | INI_SYSTEM |
|
opcache.max_accelerated_files | "10000" | INI_SYSTEM |
|
opcache.max_wasted_percentage | "5" | INI_SYSTEM |
|
opcache.use_cwd | "1" | INI_SYSTEM |
|
opcache.validate_timestamps | "1" | INI_ALL |
|
opcache.revalidate_freq | "2" | INI_ALL |
|
opcache.revalidate_path | "0" | INI_ALL |
|
opcache.save_comments | "1" | INI_SYSTEM |
|
opcache.fast_shutdown | "0" | INI_SYSTEM |
|
opcache.enable_file_override | "0" | INI_SYSTEM |
|
opcache.optimization_level | "0x7FFEBFFF" | INI_SYSTEM |
До PHP 7.3.0 было 0x7FFFBFFF |
opcache.inherited_hack | "1" | INI_SYSTEM |
Удалено в PHP 7.3.0 |
opcache.dups_fix | "0" | INI_ALL |
|
opcache.blacklist_filename | "" | INI_SYSTEM |
|
opcache.max_file_size | "0" | INI_SYSTEM |
|
opcache.consistency_checks | "0" | INI_ALL |
Недоступно с PHP 8.1.18 и 8.2.5. Удалено в PHP 8.3.0. |
opcache.force_restart_timeout | "180" | INI_SYSTEM |
|
opcache.error_log | "" | INI_SYSTEM |
|
opcache.log_verbosity_level | "1" | INI_SYSTEM |
|
opcache.record_warnings | "0" | INI_SYSTEM |
Доступно с PHP 8.0.0. |
opcache.preferred_memory_model | "" | INI_SYSTEM |
|
opcache.protect_memory | "0" | INI_SYSTEM |
|
opcache.mmap_base | null |
INI_SYSTEM |
|
opcache.restrict_api | "" | INI_SYSTEM |
|
opcache.file_update_protection | "2" | INI_ALL |
|
opcache.huge_code_pages | "0" | INI_SYSTEM |
|
opcache.lockfile_path | "/tmp" | INI_SYSTEM |
|
opcache.opt_debug_level | "0" | INI_SYSTEM |
Доступно с PHP 7.1.0 |
opcache.file_cache | NULL | INI_SYSTEM |
|
opcache.file_cache_only | "0" | INI_SYSTEM |
|
opcache.file_cache_consistency_checks | "1" | INI_SYSTEM |
|
opcache.file_cache_fallback | "1" | INI_SYSTEM |
|
opcache.validate_permission | "0" | INI_SYSTEM |
Доступно с PHP 7.0.14 |
opcache.validate_root | "0" | INI_SYSTEM |
Доступно с PHP 7.0.14 |
opcache.preload | "" | INI_SYSTEM |
Доступно с PHP 7.4.0 |
opcache.preload_user | "" | INI_SYSTEM |
Доступно с PHP 7.4.0 |
opcache.cache_id | "" | INI_SYSTEM |
Только в Windows. Доступно с PHP 7.4.0 |
opcache.jit | "tracing" | INI_ALL |
Доступно с PHP 8.0.0 |
opcache.jit_buffer_size | "0" | INI_SYSTEM |
Доступно с PHP 8.0.0 |
opcache.jit_debug | "0" | INI_ALL |
Доступно с PHP 8.0.0 |
opcache.jit_bisect_limit | "0" | INI_ALL |
Доступно с PHP 8.0.0 |
opcache.jit_prof_threshold | "0.005" | INI_ALL |
Доступно с PHP 8.0.0 |
opcache.jit_max_root_traces | "1024" | INI_SYSTEM |
Доступно с PHP 8.0.0 |
opcache.jit_max_side_traces | "128" | INI_SYSTEM |
Доступно с PHP 8.0.0 |
opcache.jit_max_exit_counters | "8192" | INI_SYSTEM |
Доступно с PHP 8.0.0 |
opcache.jit_hot_loop | "64" | INI_SYSTEM |
Доступно с PHP 8.0.0 |
opcache.jit_hot_func | "127" | INI_SYSTEM |
Доступно с PHP 8.0.0 |
opcache.jit_hot_return | "8" | INI_SYSTEM |
Доступно с PHP 8.0.0 |
opcache.jit_hot_side_exit | "8" | INI_SYSTEM |
Доступно с PHP 8.0.0 |
opcache.jit_blacklist_root_trace | "16" | INI_ALL |
Доступно с PHP 8.0.0 |
opcache.jit_blacklist_side_trace | "8" | INI_ALL |
Доступно с PHP 8.0.0 |
opcache.jit_max_loop_unrolls | "8" | INI_ALL |
Доступно с PHP 8.0.0 |
opcache.jit_max_recursive_calls | "2" | INI_ALL |
Доступно с PHP 8.0.0 |
opcache.jit_max_recursive_returns | "2" | INI_ALL |
Доступно с PHP 8.0.0 |
opcache.jit_max_polymorphic_calls | "2" | INI_ALL |
Доступно с PHP 8.0.0 |
Краткое разъяснение конфигурационных директив.
opcache.enable
bool
Разрешает кеширование опкодов. Если запрещено, код не будет оптимизироваться
и кешироваться. Опцию opcache.enable
нельзя включить во
время исполнения с помощью ini_set(), но можно выключить.
Попытка включить её таким образом приведёт к генерации предупреждения.
opcache.enable_cli
bool
Разрешает кеширование опкодов для CLI-версии PHP.
opcache.memory_consumption
int
Размер разделяемой памяти в мегабайтах для OPcache.
Минимально допустимое значение — "8"
,
которое применяется, если установлено меньшее значение.
opcache.interned_strings_buffer
int
Количество памяти в мегабайтах для хранения интернированных строк.
opcache.max_accelerated_files
int
Максимальное количество ключей (и, соответственно, скриптов) в хеш-таблице
OPcache. Фактическое используемое значение будет первым числом из набора
{ 223, 463, 983, 1979, 3907, 7963, 16229, 32531, 65407, 130987, 262237, 524521, 1048793 }
,
которое больше или равно заданному в этом параметре.
Минимум 200, максимум 1000000.
Значения за пределами этого диапазона ограничены до допустимого диапазона.
opcache.max_wasted_percentage
int
Максимальное значение потерянной памяти (в процентах) после которого планируется
перезапуск, если недостаточно свободной памяти.
Максимально допустимое значение: "50"
,
которое применяется, если установлено большее значение.
opcache.use_cwd
bool
Если включено, OPcache добавляет текущую рабочую директорию к ключу скрипта, тем самым устраняя возможность коллизий для файлов с одинаковым именем. Отключение этой опции повышает производительность, но может привести к сбоям.
opcache.validate_timestamps
bool
Если включено, OPcache будет проверять актуальность закешированных скриптов каждые opcache.revalidate_freq секунд. Когда запрещено, вы можете перезапустить OPcache вручную с помощью opcache_reset(), opcache_invalidate() или перезапустив веб-сервер для того, чтобы изменения вступили в силу.
Замечание: OPcache всё ещё может проверять временную метку файла во время компиляции, если для опций opcache.file_update_protection или opcache.max_file_size установлены ненулевые значения.
opcache.revalidate_freq
int
Как часто в секундах проверять временные метки файлов.
0
приведёт к тому, что OPcache будет производить эту проверку
при каждом запросе.
Эта директива игнорируется, если выключена opcache.validate_timestamps.
opcache.revalidate_path
bool
Если выключено, существующие закешированные файлы, использующие один и тот же include_path, будут повторно использоваться. Таким образом, если файл с тем же именем находится в другом месте в include_path, он не будет найден.
opcache.save_comments
bool
Если выключено, все комментарии будут отброшены из кеша опкодов для минимизации размера кода. Отключение этой опции может привести к тому, что некоторые фреймворки, полагающиеся на аннотации в комментариях, перестанут работать, включая Doctrine, Zend Framework 2 и PHPUnit.
opcache.fast_shutdown
bool
Если включено, то будет использована быстрая последовательность перезагрузки, при которой не происходит очистки всех выделенных блоков памяти. Вместо этого для освобождения всего набора переменных используется стандартный менеджер памяти Zend Engine.
Эта директива была удалена в PHP 7.2.0. Вариант быстрой последовательности перезагрузки был интегрирован в PHP и автоматически будет использоваться, если это возможно.
opcache.enable_file_override
bool
Если включено, то кеш опкодов будет проверять, закеширован ли уже файл при вызове функций file_exists(), is_file() и is_readable(). Это может повысить производительность для приложений, проверяющих присутствие и доступность для чтения скриптом PHP, но несёт риск возврата устаревших данных, если запрещена опция opcache.validate_timestamps.
opcache.optimization_level
int
Битовая маска, контролирующая, какие шаги оптимизации выполняются. По умолчанию применяются все безопасные оптимизации. Изменение значения по умолчанию в основном полезно для отладки/разработки оптимизатора (смотрите также opcache.opt_debug_level).
opcache.inherited_hack
bool
Эта директива игнорируется.
opcache.dups_fix
bool
Этот хак требуется только для обхода ошибок "Cannot redeclare class".
opcache.blacklist_filename
string
Местоположение чёрного списка OPcache. Файл чёрного списка содержит имена файлов, которые не нужно ускорять, по одной записи на строку. Допустимы шаблоны поиска и префиксы. Строки, начинающиеся с точки с запятой игнорируются
Пример простого чёрного списка:
; Указываем конкретный файл. /var/www/broken.php ; Префикс, обозначающий все файлы, начинающиеся с x. /var/www/x ; Шаблон поиска. /var/www/*-broken.php
opcache.max_file_size
int
Максимальный размер файла для кеширования в байтах.
Если задать 0
, то кешироваться будут все файлы.
opcache.consistency_checks
int
Если не ноль, OPcache будет сверять контрольную сумму кеша каждые N запросов, где N — заданное в этой директиве значение. Рекомендуется включать только при отладке, так как сильно влияет на производительность.
Замечание:
Недоступно с PHP 8.1.18 и 8.2.5. Удалено в PHP 8.3.0.
opcache.force_restart_timeout
int
Количество секунд ожидания освобождения кеша, после которого будет принудительно произведён запланированный перезапуск. Если это время превышено, OPcache считает, что происходит что-то неправильное и убивает процесс, блокирующий кеш.
Если параметр opcache.log_verbosity_level задать равным 2 или больше, то, при возникновении подобной ситуации, в лог ошибок будет записано предупреждение.
Директива не поддерживается в Windows.
opcache.error_log
string
Лог ошибок OPcache. Пустая строка считается как stderr
, и ошибки
будут выведены в стандартный поток ошибок (в большинстве случаев это лог
ошибок веб-сервера).
opcache.log_verbosity_level
int
Уровень подробности лога ошибок. По умолчанию будут записываться только фатальные ошибки (уровень 0) и ошибки (уровень 1). Также значения могут быть следующими: предупреждения (уровень 2), информационные сообщения (уровень 3) и сообщения отладки (уровень 4).
opcache.record_warnings
bool
Если включено, OPcache запишет предупреждения во время компиляции и воспроизведёт их при следующем включении, даже если оно выполняется из кеша.
opcache.preferred_memory_model
string
Предпочитаемая модель памяти для OPcache. Если оставить пустым, то OPcache самостоятельно выберет наиболее подходящую модель, которая будет вести себя корректно практически в любых случаях.
Возможные значения включают mmap
, shm
,
posix
и win32
.
opcache.protect_memory
bool
Защищает разделяемую память от неожиданной записи во время запуска скриптов. Полезно только для внутренней отладки.
opcache.mmap_base
string
Базовое значение для сегмента разделяемой памяти в Windows. Все процессы PHP должны отображать разделяемую память в одинаковое адресное пространство. Данная опция помогает починить ошибки типа "Unable to reattach to base address".
opcache.restrict_api
string
Позволяет вызывать функции API OPcache только скриптам, чей путь начинается с указанной строки. Значение по умолчанию "" означает отсутствие ограничений.
opcache.file_update_protection
string
Исключит кеширование файлов, с момента изменения которых прошло меньше секунд, чем указано.
Это защищает от кеширования не полностью обновлённых файлов. Если все обновления файлов атомарны, можно повысить
производительность, задав этот параметр равным 0
.
Это разрешит закешировать файлы немедленно.
opcache.huge_code_pages
bool
Включает или отключает копирование кода PHP (текстового сегмента) в HUGE PAGES. Это может повысить производительность, но требует соответствующих системных настроек. Доступно в Linux начиная с PHP 7.0.0 и FreeBSD начиная с PHP 7.4.0.
opcache.lockfile_path
string
Абсолютный путь к хранилищу общих файлов блокировок (только *nix)
opcache.opt_debug_level
string
Производит вывод опкодов для отладки разных этапов оптимизации. 0x10000 приведёт к выводу опкодов как только они сгенерированы компилятором, до применения какой-либо оптимизации. 0x20000 приведёт к выводу опкодов после оптимизации.
opcache.file_cache
string
Разрешает и задаёт директорию кеша второго уровня. Это должно повысить производительность в случае, если память SHM заполнена, сервер перезапущен или SHM сброшена. Значение по умолчанию "" запрещает кеширование на файловой системе.
opcache.file_cache_only
bool
Включает или выключает кеширование опкодов в разделяемой памяти.
Замечание:
До PHP 8.1.0 отключение этой директивы с уже заполненным файловым кешем требовало ручной очистки файлового кеша.
opcache.file_cache_consistency_checks
bool
Включает или выключает проверку контрольной суммы при загрузке скрипта из файлового кеша.
opcache.file_cache_fallback
bool
Применяет opcache.file_cache_only=1 для некоторых процессов, которые завершились ошибкой при переподключении к разделяемой памяти (только для Windows). Требуется явно разрешённое кеширование на файловую систему.
Отключение этой опции конфигурации может помешать запуску процессов, и поэтому не рекомендуется.
opcache.validate_permission
bool
Проверяет права доступа к кешированному файлу для текущего пользователя.
opcache.validate_root
bool
Предотвращает коллизии имён в chroot-окружении. Должно быть включено для всех случаев использования chroot-окружений для предотвращения доступа к файлам за пределами chroot.
opcache.preload
string
Задаёт скрипт PHP, который будет скомпилирован и запущен при старте сервера и сможет предзагрузить другие файлы, либо с помощью include, либо используя функцию opcache_compile_file(). Все сущности (например функции и классы), определённые в этих файлах, автоматически будут доступны до момента выключения сервера.
Замечание:
Предварительная загрузка не поддерживается в Windows.
opcache.preload_user
string
Позволяет запускать предварительную загрузку от имени указанного пользователя системы.
Полезно для серверов, которые запускаются от имени root перед переключением на непривилегированного пользователя системы.
По умолчанию предварительная загрузка от имени root запрещена по соображениям безопасности,
если только этой директиве явно не установлено значение root
.
opcache.cache_id
string
В Windows все процессы, выполняющие один и тот же PHP SAPI под одной и той же учётной записью пользователя с одинаковым идентификатором кеша, совместно используют один экземпляр OPcache. Значение идентификатора кеша может быть свободно выбрано.
Для IIS разные пулы приложений могут иметь собственный экземпляр OPcache,
используя переменную среды APP_POOL_ID как
opcache.cache_id
.
opcache.jit
string|int
Для обычного использования параметр принимает одно из четырёх строковых значений:
disable
: Полностью отключён, не может быть включён во время выполнения.off
: Отключено, но может быть включено во время выполнения.tracing
/on
: Используйте трассировку JIT.
Включено по умолчанию и рекомендуется для большинства пользователей.
function
: Используйте функцию JIT.
Для расширенного использования параметр принимает 4-значное целое число CRTO
, где цифры означают:
C
(Флаги оптимизации для процессора)0
: Отключить оптимизацию для ЦП.1
: Включите использование AVX, если ЦП поддерживает его.R
(распределение регистров)0
: Не выполнять распределение регистров.1
: Выполнять выделение локального блочного регистра.2
: Выполнять выделение глобального регистра.T
(триггер)0
: Компиляция всех функций при загрузке скрипта.1
: Компиляция функций при первом выполнении.2
: Профилирование функций при первом запросе и затем компилирование самых популярных функций.
3
: Профилирование на лету и компиляция горячих функций.4
: В настоящее время не используется.5
: Использование трассировки JIT. Профилирование на лету и компиляция трассировки для горячих сегментов кода.
O
(уровень оптимизации)0
: Без JIT.1
: Минимальный JIT (вызов стандартных обработчиков виртуальных машин).2
: Встроенные обработчики виртуальных машин.3
: Использовать вывод типа.4
: Использовать график вызовов.5
: Оптимизировать весь скрипт."tracing"
соответствует CRTO = 1254
,
Режим "function"
соответствует CRTO = 1205
.
opcache.jit_buffer_size
int
Объем разделяемой памяти, резервируемый для скомпилированного JIT-кода. Нулевое значение отключает JIT.
Если указано целое значение (int), объём измеряется байтами. Можно также использовать сокращённую запись, которая описана в этом разделе FAQ.opcache.jit_debug
int
Битовая маска, определяющая, какой вывод отладки JIT следует включить.
Возможные значения смотрите в файле » zend_jit.h
(поиск макроопределений, начинающихся с ZEND_JIT_DEBUG
).
opcache.jit_bisect_limit
int
Опция отладки, отключающая JIT-компиляцию после компиляции определённого количества функций.
Может быть полезно для разделения источника неправильной компиляции JIT.
Примечание: этот параметр работает, только если для триггера JIT установлено значение 0 (компиляция при загрузке скрипта)
или 1 (компиляция при первом выполнении), например, opcache.jit=1215
.
Подробнее смотрите в разделе opcache.jit.
opcache.jit_prof_threshold
float
При использовании режима триггера "профилирование функций при первом запросе" этот порог определяет, считается ли функция горячей. Количество вызовов функции, разделённое на количество вызовов всех функций, должно быть выше порогового значения. Например, порог 0,005 означает, что функции, составляющие более 0,5% всех вызовов, будут скомпилированы JIT.
opcache.jit_max_root_traces
int
Максимальное количество корневых стеков вызова. Корневой стек вызова — это поток выполнения, проходящий по коду сначала по одному пути, что является единицей компиляции JIT. JIT не будет компилировать новый код, если он достигнет этого предела.
opcache.jit_max_side_traces
int
Максимальное количество боковых стеков вызова, которые может иметь корневой стек. Боковой стек вызова — это другой поток выполнения, который не следует по пути скомпилированного корневого стека вызова. Боковые стеки вызова, принадлежащие одному и тому же корневому стеку вызова, не будут компилироваться, если они достигают этого предела.
opcache.jit_max_exit_counters
int
Максимальное количество счётчиков выхода бокового стека вызова. Это ограничивает общее количество боковых стеков, которые могут быть во всех корневых стеках.
opcache.jit_hot_loop
int
Через сколько итераций цикл считается горячим.
Допустимый диапазон значений: [0,255]
; для любого значения вне этого диапазона,
например, -1 или 256, будет использоваться значение по умолчанию.
В частности, нулевое значение отключит JIT для отслеживания и компиляции любых циклов.
opcache.jit_hot_func
int
Через сколько вызовов функция считается горячей.
Допустимый диапазон значений: [0,255]
; для любого значения вне этого диапазона,
например, -1 или 256, будет использоваться значение по умолчанию.
В частности, нулевое значение отключит JIT для отслеживания и компиляции любых функций.
opcache.jit_hot_return
int
Через сколько возвратов возврат считается горячим.
Допустимый диапазон значений: [0,255]
; для любого значения вне этого диапазона,
например, -1 или 256, будет использоваться значение по умолчанию.
В частности, нулевое значение отключит JIT для отслеживания и компиляции любых возвратов.
opcache.jit_hot_side_exit
int
Через сколько выходов боковой стек считается горячим.
Допустимый диапазон значений: [0,255]
; для любого значения вне этого диапазона,
например, -1 или 256, будет использоваться значение по умолчанию.
В частности, нулевое значение отключит JIT для отслеживания и компиляции любых побочных выходов.
opcache.jit_blacklist_root_trace
int
Максимальное количество попыток компиляции корневой трассировки, прежде чем она будет занесена в чёрный список.
opcache.jit_blacklist_side_trace
int
Максимальное количество попыток компиляции боковой трассировки до того, как она будет занесена в чёрный список.
opcache.jit_max_loop_unrolls
int
Максимальное количество попыток развернуть цикл в боковой трассировке, пытаясь достичь корневой трассировки и закрыть внешний цикл.
opcache.jit_max_recursive_calls
int
Максимальное количество развёрнутых рекурсивных циклов вызова.
opcache.jit_max_recursive_returns
int
Максимальное количество развёрнутых рекурсивных циклов возврата.
opcache.jit_max_polymorphic_calls
int
Максимальное количество попыток встроенных полиморфных (динамических или методических) вызовов. Вызовы выше этого лимита обрабатываются как метаморфические и не встраиваются.