Самоучитель: PHP под капотом: runtime и стандартная библиотека
Глава 18 из 20VI. Эксплуатация и миграция145 минут

Глава 18. OPcache, JIT и ёмкость FPM по измерениям

Производительность production PHP начинается с OPcache и измерения запроса; JIT и число workers выбираются после профиля CPU, памяти и очереди.

После главы вы сможете
  • объяснять OPcache
  • считать worker budget
  • не включать JIT вслепую

Что кэширует OPcache

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

Validate timestamps, memory consumption и стратегия deployment должны быть согласованы. Неизменяемый release directory позволяет сбрасывать или перезапускать workers управляемо, не смешивая версии файлов.

Бюджет пула

Ёмкость FPMКоличество workers ограничено памятью и downstream-ёмкостью; очередь и latency показывают насыщение раньше полного отказа.TrafficarrivalListen queuewaitingWorkerspm.max_childrenRequestmemory/timeSignalssaturation
Количество workers ограничено памятью и downstream-ёмкостью; очередь и latency показывают насыщение раньше полного отказа.

Preload как deployment contract

Preload выполняет PHP-файл при старте процесса и сохраняет выбранные классы. Ошибка или устаревший список влияет на весь пул. Это не универсальный автозагрузчик и не место для открытия request-specific соединений.

Преимущество измеряется на production-like workload. При каждом release preload и workers должны получить согласованную версию кода; reload входит в процедуру публикации.

JIT: сначала профиль

JIT способен помочь CPU-bound численным задачам, но типичное веб-приложение часто ждёт базу и сеть. Pulse benchmark разделяет parsing JSON, агрегацию и I/O. Ускорение синтетического цикла не доказывает улучшение p95 HTTP latency.

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

pm и память

pm.max_children ограничивается доступной памятью на worker с запасом для master, OPcache и ОС. dynamic, ondemand и static дают разные компромиссы latency и idle memory. max_requests может ограничить накопление утечки, но не заменяет её поиск.

Больший пул способен перегрузить базу большим числом параллельных соединений. Capacity рассчитывается по всей цепочке, а не только по свободной RAM веб-узла.

Лаборатория

Измерьте Pulse без и с прогретым OPcache, отдельно CPU aggregation и чтение. Рассчитайте безопасный max_children по p95 памяти и проверьте очередь при контролируемой нагрузке.

  • Benchmark содержит warm-up.
  • JIT сравнивается на CPU-bound этапе.
  • Пул не превышает лимит соединений базы.
Локальный прогресс

Закрепите материал

Отметка, заметка, чек-лист и ответы остаются в localStorage этого браузера и не отправляются в аналитику.

Контрольная карта лаборатории

Выполнено: 0 из 3

Локальный тест

1. Что хранит OPcache?
2. Всегда ли JIT ускоряет web latency?

Перелинковка со справочником

Проверка актуальности

  • php.nethttps://www.php.net/manual/en/book.opcache.phpПервичный источник для актуализации фактов. Адрес приведён как текст и не является активной ссылкой.
  • php.nethttps://www.php.net/manual/en/install.fpm.phpПервичный источник для актуализации фактов. Адрес приведён как текст и не является активной ссылкой.
  • php.nethttps://www.php.net/releases/8.5/en.phpПервичный источник для актуализации фактов. Адрес приведён как текст и не является активной ссылкой.

Текст и схемы созданы для этого самоучителя без воспроизведения страниц, иллюстраций и листингов приложенной книги. Проверено: .

Данные этого сервиса

Настройки cookie и локальных данных

Аналитика

Текущий статус: не выбран. До согласия обе аналитические системы не загружаются.

Локальные данные

Удаление затрагивает только ключи PHP-сервиса в этом браузере и требует подтверждения.

Политики

Политика конфиденциальности · Политика использования файлов cookie