Значение PHP_FCGI_CHILDREN и max-procs в настройках Lighttpd и Fastcgi

В конфигурации fastcgi есть 4 поля: max-procs, max-load-per-proc, PHP_FCGI_CHILDREN, PHP_FCGI_MAX_REQUESTS:

fastcgi.server = ( ".php" =>
(( "socket" => "/tmp/php-fastcgi.socket",
"bin-path" => "/usr/local/bin/php",
"max-procs" => "2",
"bin-environment" => (
"PHP_FCGI_CHILDREN" => "3",
"PHP_FCGI_MAX_REQUESTS" => "10000" )
))
)
  • Так как в fastcgi.server есть только 1 запись, будет 1 бэкэнд Fastcgi.
  • Поскольку PHP_FCGI_CHILDREN = 3 и max-procs = 2, число процессов «/ usr / local / bin / php» будет 2 * (3 + 1) = 7.
  • Поскольку max-procs = 2, в статусе сервера будет статус fastcgi.backend.0.0 и fastcgi.backend.0.1

Итак, будет 1 fastcgi бэкэнд с 2 процессами. Эти процессы принимают нагрузку.

Я не понимаю следующее:

  1. Какое значение имеет PHP_FCGI_CHILDREN?
  2. Обрабатывается ли запрос PHP_FCGI_CHILDREN или процедурой?
  3. Какой параметр определяет максимальную нагрузку в 1 процесс? И каково его значение по умолчанию?
  4. Имеет ли максимальная загрузка процедуры какое-либо отношение к PHP_FCGI_MAX_REQUESTS?
  5. Что будет, если PHP_FCGI_CHILDREN = 0? Было упомянуто, что max-proc = количество наблюдателей и max-proc * PHP_FCGI_CHILDREN = количество рабочих. Что это значит?
  6. Когда процедура считается перегруженной?

3

Решение

Надеюсь, что это проливает некоторый свет на ситуацию

Небольшой контекст для остальной части этого ответа:

«Основной» процесс — это процесс, который порождается. Это может поделиться всеми своими ресурсами [как память] со своими детьми. Но, тем не менее, не обрабатывает запросы php, думайте об этом как о контейнере для реальных обработчиков запросов.

«Дочерний» процесс — это то, что фактически обрабатывает запросы php. Это, в свою очередь, также является очень важным фактором, определяющим нагрузку на «основной» процесс.

Общая стратегия здесь должна заключаться в том, чтобы минимизировать количество «основных» процессов и максимизировать количество «дочерних» процессов при сохранении стабильности, поскольку дочерние процессы будут иметь общий opcache, memoryspace и системные ресурсы со своими братьями и сестрами.

  1. PHP_FCGI_CHILDREN = Количество дочерних процессов, которые может породить «главный» процесс.
  2. Запросы обрабатываются PHP_FCGI_CHILDREN
  3. PHP_FCGI_CHILDREN и по умолчанию 1, и если установлено другое значение, всегда добавляет 1 к указанному вами числу [так что если вы укажете это как 1, он добавляет 1, так что он станет 2]
  4. Да, это так
  5. Если вы установите PHP_FCGI_CHILDREN=0 каждый основной процесс порождает только 1 дочерний процесс
  6. Процесс перегружен, когда он не может обрабатывать больше запросов [из-за нехватки ресурсов] Это очень зависит от системы / окружающей среды, так что извините за то, что здесь так плохо
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]