2.3.4. OPcache и JIT

Оплата

На виртуальном хостинге OPcache оплачивается посуточно с баланса, на бизнес-хостинге входит в стоимость тарифа. JIT доступен только на бизнес-хостинге и входит в стоимость тарифа.

OPcache предназначен для кеширования скомпилированного байт-кода PHP-скриптов в оперативной памяти. Его использование позволяет в некоторой степени ускорить работу скриптов сайта и снизить создаваемую ими нагрузку на веб-сервер. OPcache можно использовать на любых сайтах, специальная поддержка со стороны сайтов не требуется.

Важные моменты:

  • При заказе для виртуального хостинга на балансе должна быть сумма для оплаты минимум 1 месяца использования услуги.
  • OPcache доступен только для сайтов с версией PHP не ниже 5.5.
  • Максимальный объём памяти, который можно выделять для OPcache:
    • Виртуальный хостинг — 4 ГБ для каждого сайта.
    • Бизнес-хостинг — не более 20% объёма оперативной памяти тарифа суммарно для всех сайтов хостинг-аккаунта.
  • Память выделяется с шагом 32 МБ.
  • Невозможно заранее определить необходимый сайту объём памяти для OPcache. Конкретное значение можно выяснить только экспериментальным путём — выделить память и изучить собранную статистику. Для большинства сайтов редко требуется более 32 МБ.
  • Выделение сайту слишком маленького объёма памяти для OPcache может вызывать ошибку 503.
  1. Откройте раздел «Настройки PHP» и переключитесь на вкладку «OPcache».
  2. В блоке «Настройки OPcache» в поле «Выделяемый объём памяти» выберите нужный объём памяти и нажмите «Сохранить»:
  3. Подождите примерно 15 минут, пока изменения вступят в силу.
OPcache Preloading не поддерживается из-за небезопасной настройки и необходимости обновления загруженных в память скриптов, которые могут обновляться только с перезапуском службы PHP.

Параметр «Частота проверки изменений в файлах» (opcache.revalidate_freq) по умолчанию равен нулю. Это означает, что при каждом запросе будет проверяться, изменялся ли скрипт и можно ли его всё ещё брать из кеша или нужно вызывать заново. Использовать значение больше нуля имеет смысл, если к сайту поступает большое количество запросов и его файлы не редактируются. Это даст некоторый прирост производительности за счёт снижения количества дисковых операций.

Важные моменты:

  • Данные статистики обновляются при каждом открытии страницы статистики. Также их можно обновлять вручную кнопкой в заголовке блока со статистикой.
  • Полностью заполненное хранилище OPcache не будет создавать ошибок в работе сайта, но это может быть один из признаков необходимости увеличения выделенного объёма памяти для кеширования.
  • При заполнении хранилища на 100% непопулярные и старые данные будут перезаписаны более популярными, волноваться по поводу эффективности кеширования не стоит.
  • Для доступа к статистике сайт должен быть доступен по HTTP и в .htaccess не должно быть директив, который могут мешать прямому доступу к файлам вида opcache-stat-XXxxxXxXXXXXX.php в корневом каталоге сайта.

Просмотр статистики:

  1. Откройте раздел «OPcache».
  2. В блоке «Сайты с включённым OPcache» в строке с нужным сайтом нажмите «Статистика»:

Пример статистики:

Диаграмма «Процент от общего объёма» показывает:
  • Процент занятой памяти.
  • Процент свободной памяти.
  • Процент потерянной (wasted) памяти. Потерянная память — это память, которая занята уже устаревшими, неактуальными данными. Она появляется из-за изменения скриптов или невозможности использовать для них текущие данные. Такая память очищается автоматически при достижении определённой доли максимума от общей памяти, поэтому ручная очистка не требуется. Такой подход обеспечивает более быструю работу OPcache.

Диаграмма «Процент от всех запросов» показывает:

  • Попадания — статистика запросов к скриптам, которые находились в кеше, и был предоставлен результат без исполнения исходного кода.
  • Промахи — статистика запросов к скриптам, которые не находились в кеше и были выполнены.

Полный список опций OPcache доступен в официальной документации.

Список опций OPcache и их текущие значения:

Информация о скриптах и их оптимизации:
  1. Откройте раздел «Настройки PHP» и переключитесь на вкладку «OPcache».
  2. В блоке «Настройки OPcache» нажмите «Очистить кеш».
В главном меню бота выберите «ХостингСайты → выберите сайт → Очистить кеш OPcache».
  1. Откройте раздел «Настройки PHP» и переключитесь на вкладку «OPcache».
  2. В блоке «Настройки OPcache» в поле «Выделяемый объём памяти» выберите «Отключён» и нажмите «Сохранить»:
  3. Подождите примерно 15 минут, пока изменения вступят в силу.

JIT (Just-In-Time) работает совместно с OPcache и компилирует код в инструкции процессора непосредственно во время его выполнения, тем самым часть кода выполняется вообще без виртуальной машины Zend и передаётся на выполнение напрямую процессору. Благодаря этому код может выполняться ещё быстрее, чем при использовании OPcache без JIT.

Эффект от использования JIT более заметен с тем кодом, который выполняет активные вычисления и интенсивно использует ресурсы процессора, и менее заметен при большом количестве операций ввода/вывода.

Важные моменты:

  • Версия PHP должна быть не ниже 8.0.
  • Объём выделяемой памяти не может превышать объём памяти для OPcache.
  • ionCube должен быть отключён.
  1. Включите OPcache (если не включён).
  2. Откройте раздел «Настройки PHP» и переключитесь на вкладку «OPcache».
  3. В блоке «Настройки OPcache» в секции «OPcache JIT» в поле «Выделяемый объём памяти» выберите нужный объём памяти, настройки и нажмите «Сохранить»:
  4. Подождите примерно 15 минут, пока изменения вступят в силу.

Проверить статус JIT можно простым PHP-скриптом:

<?php
var_dump(opcache_get_status()['jit']);

Результат будет примерно таким:

array(7) {
  ["enabled"]=>
  bool(true)
  ["on"]=>
  bool(true)
  ["kind"]=>
  int(5)
  ["opt_level"]=>
  int(5)
  ["opt_flags"]=>
  int(6)
  ["buffer_size"]=>
  int(33554416)
  ["buffer_free"]=>
  int(33551984)
}

Если значения enabled и on равны true, значит всё в порядке.

Для JIT можно настраивать использование оптимизации процессора, распределение регистров, условия срабатывания компиляции (триггер) и уровень оптимизации:

Наиболее оптимальным считается значение 1255 (как на скриншоте выше), которое позволяет задействовать JIT на максимум.

JIT автоматически отключается при отключении OPcache.
  1. Откройте раздел «Настройки PHP» и переключитесь на вкладку «OPcache».
  2. В блоке «Настройки OPcache» в секции «OPcache JIT» в поле «Выделяемый объём памяти» выберите «Отключён» и нажмите «Сохранить»:
  3. Подождите примерно 15 минут, пока изменения вступят в силу.
Содержание

    Комментарии

    namzy
    PHP 8.1 + включенный JIT ломают REST API Wordpress'а. Судя по информации в сети, баг исправлен в PHP 8.1.15, во всех младших версиях PHP 8.1 баг есть.
    karlov
    На хостинге используются самые актуальные версии PHP. Для PHP 8.1 на текущий момент это версия 8.1.32. Проверить точную версию на хостинге можно с помощью phpinfo() — https://www.ukraine.com.ua/wiki/hosting/php/scripts/phpinfo/ — или по ссылке — https://www.ukraine.com.ua/action/hosting/phpinfo/?ver=81
    namzy
    Благодарю за информацию. Займусь выяснением причины.