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
    Благодарю за информацию. Займусь выяснением причины.