Как на самом деле работает OPcache max_accelerated_files

Может быть, это глупый вопрос, но я пытаюсь выяснить, как на самом деле работает max_accelerated_files...

Я понимаю "описание / инструкции" из сети PHP

opcache.max_accelerated_files integer Максимальное количество ключей (и, следовательно, сценариев) в хэш-таблице OPcache. Фактическое используемое значение будет первым числом в наборе простых чисел { 223, 463, 983, 1979, 3907, 7963, 16229, 32531, 65407, 130987 }, которое больше или равно настроенному значению. Минимальное значение равно 200. Максимальное значение равно 100000 в PHP < 5.5.6 и 1000000 в более поздних версиях.

Но мой вопрос в том, что он делает с этим номером, когда-то настроен. Выделяет ли он память для этого параметра? почему бы нам просто не установить число 1000000 и все, если у нас достаточно памяти? Что произойдет, если, скажем, настроить это число на 2000, и у нас будут файлы 2010? Делают ли они какой-то стек, и когда этот файл включается, он кэшируется? Что происходит с некэшированными файлами?

Спасибо за ответ

0 ответов

OPCache хранит кэшированные скрипты в HashTable, структуре данных с очень быстрым временем поиска (в среднем), поэтому кэшированные скрипты можно быстро получить. max_accelerated_files представляют максимальное количество ключей, которые могут быть сохранены в этой HashTable. Вы можете думать об этом как о максимальном количестве ключей в ассоциативном массиве. Выделенная для этого память является частью общей памяти, которую может использовать OPCache, которую вы можете настроить с помощью opcache.memory_consumption вариант. Когда OPCache пытается кэшировать больше сценариев, чем доступно количество ключей, он запускает перезапуск и очищает текущий кэш.

Итак, давайте просто скажем, что вы настроили opcache.max_accelerated_files до 223 и просьба к вашему /home разбирать маршрут и кэшировать в сценарии OPCache 200. Пока ваши следующие запросы будут нужны только эти 200 сценариев, OPCache - это нормально. Но если один из следующих запросов анализирует 24 новых сценария, OPCache запускает перезапуск, чтобы освободить место для их кэширования. Поскольку вы не хотите, чтобы это происходило, вам следует отслеживать OPCache и выбирать соответствующий номер.

Помните, что один файл можно кэшировать более одного раза с разными ключами, если требуется относительный путь, например require include.php или же require ../../include.php, Самое чистое решение, чтобы избежать этого - использовать правильную автозагрузку.

Другие вопросы по тегам