Настройка производительности PHP 8: OpCache и JIT

Backend2026-09-24TryQuickToolBox

Ваше приложение на PHP 8 работает медленно под нагрузкой. Вы оптимизировали запросы, добавили кэширование, но время отклика всё ещё велико. Возможно, причина в накладных расходах самого PHP. Две мощные функции — OpCache и JIT — могут значительно ускорить ваш код, но только при правильной настройке. Это руководство объясняет, как они работают, и как настроить их для реальных нагрузок.

Что такое OpCache и почему это важно

PHP — интерпретируемый язык: каждый запрос обычно парсит и компилирует ваши исходные файлы в байт-код перед выполнением. OpCache сохраняет этот скомпилированный байт-код в разделяемой памяти, поэтому последующие запросы пропускают парсинг и компиляцию. Результат? Снижение нагрузки на CPU и ускорение отклика.

OpCache включён по умолчанию во многих production-конфигурациях, но стандартные настройки консервативны. Их тонкая настройка может дать 2–3-кратный прирост пропускной способности для приложений, ограниченных CPU.

Ключевые директивы конфигурации OpCache

Рекомендуемые настройки OpCache для production

; php.ini
opcache.enable=1
opcache.memory_consumption=256
opcache.max_accelerated_files=20000
opcache.validate_timestamps=0
opcache.revalidate_freq=0
opcache.interned_strings_buffer=32
opcache.preload=/path/to/preload.php
opcache.preload_user=www-data

После изменения настроек перезапустите PHP-FPM. Отслеживайте с помощью opcache_get_status() для проверки попаданий и использования памяти.

Понимание JIT в PHP 8

JIT (Just-In-Time) компиляция делает шаг дальше, чем OpCache: она компилирует байт-код в машинный код во время выполнения. Это может значительно ускорить ресурсоёмкие задачи, такие как математические вычисления, но мало помогает типичным веб-запросам, где преобладает ввод-вывод (база данных, файловая система, сеть).

JIT является частью OpCache, поэтому сначала нужно включить OpCache. В PHP 8 JIT настраивается через opcache.jit и opcache.jit_buffer_size.

Директивы конфигурации JIT

Рекомендуемые настройки JIT

opcache.jit=tracing
opcache.jit_buffer_size=128M

Примечание: JIT работает только при включённом OpCache. В CLI может потребоваться установить opcache.enable_cli=1 для тестирования JIT.

OpCache против JIT: когда что использовать

ФункцияOpCacheJIT
Основное преимуществоКэширует скомпилированный байт-кодКомпилирует байт-код в машинный код
Лучше всего дляВсе PHP-приложенияРесурсоёмкие, длительные скрипты
Влияние на I/O-приложенияВысокое (снижает парсинг/компиляцию)Низкое или отсутствует
Накладные расходы памятиУмеренныеДополнительный буфер
СложностьНизкаяСредняя

Пошаговое руководство по настройке

  1. Включите OpCache с рекомендуемыми настройками выше.
  2. Отслеживайте OpCache с помощью opcache_get_status() или инструментов вроде OpCache GUI. Стремитесь к проценту попаданий выше 99%.
  3. Настройте память, если opcache.memory_usage близко к лимиту.
  4. Рассмотрите предзагрузку для крупных фреймворков (Laravel, Symfony). Создайте скрипт предзагрузки, который подключает часто используемые классы.
  5. Включите JIT только если ваше приложение ограничено CPU. Протестируйте с JIT и без него, чтобы измерить эффект.
  6. Проведите бенчмарки с помощью инструментов вроде ab, wrk или siege. Сравните запросы в секунду и задержку.
  7. Развёртывайте изменения постепенно и следите за логами ошибок.

Распространённые ошибки и лучшие практики

FAQ

Улучшает ли JIT производительность всех PHP-приложений?

Нет. JIT помогает при ресурсоёмких задачах, таких как сложные вычисления или обработка данных. Для I/O-приложений (запросы к базе данных, вызовы API) выигрыш минимален. OpCache сам по себе часто даёт наибольшее ускорение.

Как узнать, работает ли OpCache?

Проверьте phpinfo() на статус OpCache или вызовите opcache_get_status() в скрипте. Ищите opcache_enabled => true и высокое количество hits относительно misses.

Можно ли использовать JIT с PHP 7?

Нет. JIT появился в PHP 8.0. PHP 7 поддерживает только OpCache. Если вы на PHP 7, сосредоточьтесь на настройке OpCache и рассмотрите обновление до PHP 8 для JIT и других улучшений производительности.

Готовы проанализировать производительность вашего сервера? Ознакомьтесь с нашим Анализатором логов Nginx, чтобы получить информацию из логов доступа и выявить узкие места.