Значение 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. Когда говорят, что процесс перегружен?

person Guest123    schedule 12.06.2016    source источник


Ответы (1)


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

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

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

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

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

  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. Процедура перегружается, когда она не может больше обрабатывать запросы [из-за нехватки ресурсов].
person YouriKoeman    schedule 12.11.2018