Значение 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 процессами. Эти процессы принимают нагрузку.
Я не понимаю следующее:
- Какое значение имеет PHP_FCGI_CHILDREN?
- Обрабатывается ли запрос PHP_FCGI_CHILDREN или процедурой?
- Какой параметр определяет максимальную нагрузку в 1 процесс? И каково его значение по умолчанию?
- Имеет ли максимальная загрузка процедуры какое-либо отношение к PHP_FCGI_MAX_REQUESTS?
- Что будет, если PHP_FCGI_CHILDREN=0? Было упомянуто, что max-proc = количество наблюдателей и max-proc*PHP_FCGI_CHILDREN= количество рабочих. Что это значит?
- Когда процедура считается перегруженной?
1 ответ
Надеюсь, что это проливает некоторый свет на ситуацию
Небольшой контекст для остальной части этого ответа:
"Основной" процесс - это процесс, который порождается. Это может поделиться всеми своими ресурсами [как память] со своими детьми. Но, тем не менее, не обрабатывает запросы php, думайте об этом как о контейнере для реальных обработчиков запросов.
"Дочерний" процесс - это то, что фактически обрабатывает запросы php. Это, в свою очередь, также является очень важным фактором, определяющим нагрузку на "основной" процесс.
Общая стратегия здесь должна заключаться в том, чтобы минимизировать количество "основных" процессов и максимизировать количество "дочерних" процессов при сохранении стабильности, поскольку дочерние процессы будут иметь общий opcache, memoryspace и системные ресурсы со своими братьями и сестрами.
PHP_FCGI_CHILDREN
= Количество дочерних процессов, которые может породить "главный" процесс.- Запросы обрабатываются
PHP_FCGI_CHILDREN
PHP_FCGI_CHILDREN
и по умолчанию оно равно 1, и если установлено другое значение, оно всегда добавляет 1 к указанному вами номеру [поэтому, если вы укажете его как 1, оно добавит 1, так что оно станет 2]- Да, это так
- Если вы установите
PHP_FCGI_CHILDREN=0
каждый "основной" процесс будет порождать только 1 дочерний процесс - Процесс перегружен, когда он не может обрабатывать больше запросов [из-за нехватки ресурсов] Это очень зависит от системы / окружающей среды, так что извините за то, что здесь так плохо
По-видимому, кросс-пост на https://redmine.lighttpd.net/boards/3/topics/6683
Вы смотрели в документации вики?
https://redmine.lighttpd.net/projects/1/wiki/Docs_ModFastCGI
Вы смотрели в FAQ?
https://redmine.lighttpd.net/projects/1/wiki/FrequentlyAskedQuestions
Вы пытались использовать поисковую систему, прежде чем делать несколько сообщений на этом форуме?
https://www.google.com/#q=PHP_FCGI_CHILDREN+PHP_FCGI_MAX_REQUESTS
https://serverfault.com/questions/199953/lighttpd-php-fcgi-children-correct-value