Налаштування під час виконання

Поведінка цих функцій залежить від установок у php.ini.

Опції налаштування OPcache

ИмяПо умолчаниюМесто измененияСписок изменений
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_basenullINI_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_cacheNULLINI_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

Додаткова інформація та опис режимів INI_* дано у розділі «Місця встановлення параметрів конфігурації».

Коротке пояснення конфігураційних директив.

opcache.enablebool

Дозволяє кешування опкодів. Якщо заборонено, код не оптимізуватиметься і не кешуватиметься. Опцію opcache.enable не можна увімкнути під час виконання за допомогою ini_set(), але можна вимкнути. Спроба включити її у такий спосіб призведе до генерації попередження.

opcache.enable_clibool

Дозволяє кешування опкодів для CLI-версії PHP.

opcache.memory_consumptionint

Размер разделяемой памяти в мегабайтах для OPcache. Минимально допустимое значение —"8", яке застосовується, якщо встановлено менше значення.

opcache.interned_strings_bufferint

Кількість пам'яті в мегабайтах для зберігання інтернованих рядків.

opcache.max_accelerated_filesint

Максимальна кількість ключів (і, відповідно, скриптів) у хеш-таблиці OPcache. Фактичне значення буде першим числом з набору { 223, 463, 983, 1979, 3907, 7963, 16229, 32531, 65407, 130987, 262237, 524521, 1048793 }, яке більше або дорівнює заданому в цьому параметрі. Мінімум 200, максимум 1000000. Значення за межами діапазону обмежені до допустимого діапазону.

opcache.max_wasted_percentageint

Максимальне значення втраченої пам'яті (у відсотках) після якого планується перезапуск, якщо недостатньо вільної пам'яті. Максимально допустиме значення: "50", яка застосовується, якщо встановлено більше значення.

opcache.use_cwdbool

Якщо увімкнено, OPcache додає поточну робочу директорію до ключа скрипту, тим самим усуваючи можливість колізій для файлів з однаковим ім'ям. Вимкнення цієї опції підвищує продуктивність, але може призвести до збоїв.

opcache.validate_timestampsbool

Якщо увімкнено, OPcache перевірятиме актуальність закешованих скриптів кожні opcache.revalidate_freq секунд. Коли заборонено, ви можете перезапустити OPcache вручну за допомогою opcache_reset() opcache_invalidate() або перезапустити веб-сервер для того, щоб зміни набули чинності.

Зауваження: OPcache все ще може перевіряти тимчасову мітку файлу під час компіляції, якщо для опцій opcache.file_update_protection або opcache.max_file_size встановлені ненульові значення.

opcache.revalidate_freqint

Як часто в секундах перевіряти тимчасові мітки файлів . призведе до того, що OPcache проводитиме цю перевірку при кожному запиті.

Ця директива ігнорується, якщо вимкнено opcache.validate_timestamps

opcache.revalidate_pathbool

Якщо вимкнено, існуючі закешовані файли, які використовують один і той же include_path, повторно використовуватимуться. Таким чином, якщо файл з тим же ім'ям знаходиться в іншому місці в include_path, його не буде знайдено.

opcache.save_commentsbool

Якщо вимкнено, всі коментарі будуть відкинуті з кешу опкодів для мінімізації розміру коду. Відключення цієї опції може призвести до того, що деякі фреймворки, що покладаються на анотації в коментарях, перестануть працювати, включаючи Doctrine, Zend Framework 2 та PHPUnit.

opcache.fast_shutdownbool

Якщо увімкнено, то буде використана швидка послідовність перезавантаження, при якій не відбувається очищення всіх виділених блоків пам'яті. Натомість для звільнення всього набору змінних використовується стандартний менеджер пам'яті Zend Engine.

Ця директива була видалена у PHP 7.2.0. Варіант швидкої послідовності перезавантаження був інтегрований у PHP і автоматично використовуватиметься, якщо це можливо.

opcache.enable_file_overridebool

Якщо увімкнено, то кеш опкодів перевірятиме, чи вже закешовано файл при викликі функцій file_exists() is_file() і is_readable(). Це може підвищити продуктивність додатків, які перевіряють присутність і доступність для читання скриптом PHP, але несе ризик повернення застарілих даних, якщо заборонена опція opcache.validate_timestamps

opcache.optimization_levelint

Бітова маска, яка контролює, які кроки оптимізації виконуються. За промовчанням застосовуються всі безпечні оптимізації. Зміна значення за промовчанням корисна для налагодження/розробки оптимізатора (див. також opcache.opt_debug_level

opcache.inherited_hackbool

Ця директива ігнорується.

opcache.dups_fixbool

Цей хак потрібний лише для обходу помилок "Cannot redeclare class".

opcache.blacklist_filenamestring

Розташування чорного списку OPcache. Файл чорного списку містить імена файлів, які потрібно прискорювати, по одному запису на рядок. Допустимі шаблони пошуку та префікси. Рядки, що починаються з крапки з комою, ігноруються.

Приклад простого чорного списку:

; Указываем конкретный файл.
/var/www/broken.php
; Префикс, обозначающий все файлы, начинающиеся с x.
/var/www/x
; Шаблон поиска.
/var/www/*-broken.php

opcache.max_file_sizeint

Максимальний розмір файлу для кешування у байтах. Якщо поставити , то кешуватимуться всі файли.

opcache.consistency_checksint

Якщо не нуль, OPcache звірятиме контрольну суму кешу кожні N запитів, де N — задане в цій директиві значення. Рекомендується включати лише при налагодженні, оскільки сильно впливає на продуктивність.

Зауваження :

Недоступно з PHP 8.1.18 та 8.2.5. Вилучено у PHP 8.3.0.

opcache.force_restart_timeoutint

Кількість секунд очікування звільнення кеша, після якого буде примусово здійснено запланований перезапуск. Якщо цей час перевищено, OPcache вважає, що відбувається щось неправильне і вбиває процес блокування кешу.

Якщо параметр opcache.log_verbosity_level задати рівним 2 або більше, то, при виникненні такої ситуації, у лог помилок буде записано попередження.

Директива не підтримується у Windows.

opcache.error_logstring

Лог помилок OPcache. Порожній рядок вважається як stderrі помилки будуть виведені в стандартний потік помилок (у більшості випадків це лог помилок веб-сервера).

opcache.log_verbosity_levelint

Рівень подробиці помилок лога. За умовчанням записуватимуться лише фатальні помилки (рівень 0) та помилки (рівень 1). Також значення можуть бути такими: попередження (рівень 2), інформаційні повідомлення (рівень 3) та повідомлення налагодження (рівень 4).

opcache.record_warningsbool

Якщо увімкнено, OPcache запише попередження під час компіляції та відтворить їх при наступному увімкненні, навіть якщо воно виконується з кеша.

opcache.preferred_memory_modelstring

Вподобана модель пам'яті для OPcache. Якщо залишити порожнім, то OPcache самостійно вибере найбільш підходящу модель, яка поводитиметься коректно практично у будь-яких випадках.

Можливі значення включають mmap shm posixиwin32

opcache.protect_memorybool

Захищає пам'ять від несподіваного запису під час запуску скриптів. Корисно тільки для внутрішнього налагодження.

opcache.mmap_basestring

Базове значення для сегмента пам'яті, що розділяється в Windows. Всі процеси PHP повинні відображати пам'ять, що розділяється, в однаковий адресний простір. Ця опція допомагає полагодити помилки типу "Unable to reattach to base address".

opcache.restrict_apistring

Дозволяє викликати функції API OPcache лише скриптам, чий шлях починається із зазначеного рядка. Значення за промовчанням означає відсутність обмежень.

opcache.file_update_protectionstring

Виключить кешування файлів з моменту зміни яких пройшло менше секунд, ніж зазначено. Це захищає від кешування не повністю оновлених файлів. Якщо всі оновлення файлів атомарні, можна підвищити продуктивність, задавши цей параметр рівним . Це дозволить закешувати файли негайно.

opcache.huge_code_pagesbool

Включає або вимикає копіювання коду PHP (текстового сегмента) у HUGE PAGES. Це може підвищити продуктивність, але потребує відповідних системних налаштувань. Доступно в Linux, починаючи з PHP 7.0.0 і FreeBSD, починаючи з PHP 7.4.0.

opcache.lockfile_pathstring

Абсолютний шлях до спільного сховища файлів блокування (лише *nix)

opcache.opt_debug_levelstring

Виводить код операції для налагодження різних етапів оптимізації. 0x10000 призведе до виведення кодів операцій, щойно їх згенерує компілятор, перш ніж буде застосовано будь-яку оптимізацію. 0x20000 спричинить виведення кодів операцій після оптимізації.

opcache.file_cachestring

Дозволяє та ставить директорію кеша другого рівня. Це має підвищити продуктивність, якщо пам'ять SHM заповнена, сервер перезапущено або SHM скинуто. Значення за промовчанням "" забороняє кешування на файловій системі.

opcache.file_cache_onlybool

Включає або вимикає кешування опкодів у пам'яті, що розділяється.

Зауваження :

До PHP 8.1.0 відключення цієї директиви з вже заповненим файловим кешем вимагало ручного очищення файлового кешу.

opcache.file_cache_consistency_checksbool

Включає або вимикає перевірку контрольної суми під час завантаження скрипта з файлового кешу.

opcache.file_cache_fallbackbool

Застосовує opcache.file_cache_only=1 для деяких процесів, які завершилися помилкою при перепідключенні до пам'яті, що розділяється (тільки для Windows). Потрібно явно дозволене кешування на файлову систему.

Застереження

Вимкнення цієї опції конфігурації може перешкодити запуску процесів, тому не рекомендується.

opcache.validate_permissionbool

Перевірка прав доступу до кешованого файлу для поточного користувача.

opcache.validate_rootbool

Запобігає колізії імен у chroot-оточенні. Повинне бути включено для всіх випадків використання chroot-оточень для запобігання доступу до файлів за межами chroot.

opcache.preloadstring

Задає скрипт PHP, який буде скомпільований і запущений при старті сервера і зможе завантажити інші файли, або за допомогою include, либо используя функциюopcache_compile_file(). Усі сутності (наприклад, функції та класи), визначені в цих файлах, автоматично будуть доступні до моменту вимкнення сервера.

Зауваження :

Попереднє завантаження не підтримується у Windows.

opcache.preload_userstring

Дозволяє запускати попереднє завантаження від імені вказаного користувача системи. Корисно для серверів, які запускаються від імені root перед перемиканням на непривілейованого користувача системи. За промовчанням попереднє завантаження від імені root заборонено з міркувань безпеки, якщо тільки цій директиві явно не встановлено значення root

opcache.cache_idstring

У Windows всі процеси, що виконують той самий PHP SAPI під одним і тим же обліковим записом користувача з однаковим ідентифікатором кеша, спільно використовують один екземпляр OPcache. Значення ідентифікатора кешу можна вільно вибрати.

Підказка

Для IIS різні пули додатків можуть мати власний екземпляр OPcache, використовуючи змінне середовище APP_POOL_ID як opcache.cache_id

opcache.jitstring|int

Для звичайного використання параметр приймає одне із чотирьох рядкових значень:

  • disable: Повністю вимкнено, не може бути увімкнено під час виконання.
  • off: Вимкнено, але може бути увімкнено під час виконання.
  • tracing on: Використовуйте трасування JIT Увімкнено за промовчанням і рекомендується для більшості користувачів.
  • function: Використовуйте JIT.

Для розширеного використання параметр приймає 4-значне ціле число CRTO, де цифри означають:

C(Флаги оптимизации для процессора)

  • : Вимкнути оптимізацію ЦП.
  • : Увімкніть AVX, якщо ЦП підтримує його.

R(распределение регистров)

  • : Не виконувати розподіл регістрів.
  • : Виконувати виділення локального блокового регістру.
  • : Виконувати виділення глобального регістру

T(триггер)

  • : Компіляція всіх функцій під час завантаження скрипта.
  • : Компіляція функцій під час першого виконання.
  • : Профільування функцій при першому запиті, а потім компілювання найпопулярніших функцій.
  • 3: Профілювання на льоту та компіляція гарячих функцій.
  • 4: В даний час не використовується.
  • 5: Використання трасування JIT Профілювання на льоту та компіляція трасування для гарячих сегментів коду.

O(уровень оптимизации)

  • : Без JIT
  • : Мінімальний JIT (виклик стандартних обробників віртуальних машин).
  • : Вбудовані обробники віртуальних машин
  • 3: Використовувати виведення типу.
  • 4: Використовувати графік дзвінків.
  • 5: Оптимізувати весь скрипт

Режим"tracing" відповідає CRTO = 1254, Режим"function" відповідає CRTO = 1205

opcache.jit_buffer_sizeint

Об'єм пам'яті, що розділяється, резервований для скомпільованого JIT-коду. Нульове значення вимикає JIT.

Якщо вказано ціле значення (int), обсяг вимірюється байтами. Можна також використовувати скорочений запис, який описано в у цьому розділі FAQ

opcache.jit_debugint

Бітова маска, яка визначає, який висновок налагодження JIT слід увімкнути. Можливі значення дивіться у файлі » zend_jit.h (Пошук макровизначень, що починаються з ZEND_JIT_DEBUG

opcache.jit_bisect_limitint

Опція налагодження, що відключає JIT-компіляцію після компіляції певної кількості функцій. Може бути корисним для поділу джерела неправильної компіляції JIT. Примітка: цей параметр працює, тільки якщо для тригера JIT встановлено значення 0 (компіляція під час завантаження скрипта) або 1 (компіляція при першому виконанні), наприклад, opcache.jit=1215Подробнее смотрите в разделеopcache.jit

opcache.jit_prof_thresholdfloat

При використанні режиму тригера "профілювання функцій при першому запиті" цей поріг визначає, чи функція вважається гарячою. Кількість дзвінків функції, поділена на кількість дзвінків усіх функцій, повинна бути вищою від порогового значення. Наприклад, поріг 0,005 означає, що функції, що становлять більше ніж 0,5% всіх викликів, будуть скомпільовані JIT.

opcache.jit_max_root_tracesint

Максимальна кількість кореневих стеків виклику. Кореневий стек виклику - це потік виконання, що проходить за кодом спочатку одним шляхом, що є одиницею компіляції JIT. JIT не буде компілювати новий код, якщо він досягне цієї межі.

opcache.jit_max_side_tracesint

Максимальна кількість бічних стеків виклику, які можуть мати кореневий стек. Бічний стек виклику - це інший потік виконання, який не слідує шляхом скомпілюваного кореневого стека виклику. Бічні стеки виклику, що належать одному і тому ж кореневому стеку виклику, не компілюватимуться, якщо вони досягають цієї межі.

opcache.jit_max_exit_countersint

Максимальна кількість лічильників виходу бокового стека виклику. Це обмежує загальну кількість бічних стеків, які можуть бути у всіх кореневих стеках.

opcache.jit_hot_loopint

Через скільки ітерацій цикл вважається гарячим. Допустимий діапазон значень: [0,255]; для будь-якого значення поза цим діапазоном, наприклад -1 або 256, буде використовуватися значення за замовчуванням. Зокрема, нульове значення відключить JIT для відстеження та компіляції будь-яких циклів.

opcache.jit_hot_funcint

Через скільки дзвінків функція вважається гарячою. Допустимий діапазон значень: [0,255]; для будь-якого значення поза цим діапазоном, наприклад -1 або 256, буде використовуватися значення за замовчуванням. Зокрема, нульове значення відключить JIT для відстеження та компіляції будь-яких функцій.

opcache.jit_hot_returnint

Через скільки повернень повернення вважається гарячим. Допустимий діапазон значень: [0,255]; для будь-якого значення поза цим діапазоном, наприклад -1 або 256, буде використовуватися значення за замовчуванням. Зокрема, нульове значення відключить JIT для відстеження та компіляції будь-яких повернень.

opcache.jit_hot_side_exitint

Через скільки виходів бічний стек вважається гарячим. Допустимий діапазон значень: [0,255]; для будь-якого значення поза цим діапазоном, наприклад -1 або 256, буде використовуватися значення за замовчуванням. Зокрема, нульове значення відключить JIT для відстеження та компіляції будь-яких побічних виходів.

opcache.jit_blacklist_root_traceint

Максимальна кількість спроб компіляції кореневого трасування, перш ніж вона буде занесена до чорного списку.

opcache.jit_blacklist_side_traceint

Максимальна кількість спроб компіляції бокового трасування до того, як вона буде занесена до чорного списку.

opcache.jit_max_loop_unrollsint

Максимальна кількість спроб розгорнути цикл у бічній трасуванні, намагаючись досягти кореневого трасування та закрити зовнішній цикл.

opcache.jit_max_recursive_callsint

Максимальна кількість розгорнутих рекурсивних циклів дзвінка.

opcache.jit_max_recursive_returnsint

Максимальна кількість розгорнутих рекурсивних циклів повернення.

opcache.jit_max_polymorphic_callsint

Максимальна кількість спроб вбудованих поліморфних (динамічних чи методичних) викликів. Виклики вище за цей ліміт обробляються як метаморфічні і не вбудовуються.