Я запускаю приложение Django с использованием FastCGI и lighttpd.
Может ли кто-нибудь объяснить мне, что я должен учитывать при принятии решения, какое значение использовать для maxrequests, maxspare, minspare, maxchildren?
Эти параметры не слишком хорошо документированы, но кажутся весьма важными.
Не говорите мне просто, что они делают; Я хочу понять, что у них есть подразумеваемое и как мне решить, какие значения использовать.
Спасибо.






Начнем с определения
maxrequests: How many requests does a child server before being killed
and a new one forked
maxspare : Maximum number of spare processes to keep running
minspare : Minimum number of spare processes to prefork
maxchildren: Hard limit number of processes in prefork mode
Это означает, что у вас будет не более maxдети процессов, работающих в любой момент времени на вашем веб-сервере, каждый из которых работает для запросов maxrequests. При запуске сервера вы получите процессы minspare, которые будут продолжать расти до maxspare (или maxдети), если поступают новые запросы.
Итак, minspare позволяет вам сказать, сколько одновременных запросов вы ожидаете как минимум (важно, чтобы избежать создания процесса, если вы начинаете с одного, лучше начинать, скажем, с 10), а maxspare позволяет вам сказать, сколько одновременных запросов будет у вас максимум внимания к серверу (без ущерба для ожидаемого времени отклика и т. д. Для проверки требуется стресс-тест). И maxrequests говорит о времени жизни каждого дочернего элемента на случай, если они не могут работать вечно из-за каких-либо ограничений.
Я не могу говорить за всех, хотя с Django и fastcgi мы наблюдаем множество проблем с памятью с долгоживущими процессами fastcgi. Установка разумного значения для maxrequests избавляет нас от необходимости вручную уничтожать большие процессы, так как они находятся недостаточно долго, чтобы утечка памяти нанесла большой ущерб.
Так в чем разница между maxchildren и maxspare? Мне они кажутся излишними.
Может быть максимум процессов maxchildren и максимум резервных процессов maxspare (свободных, неиспользуемых, ожидающих процессов запроса). Итак, maxchildren> = maxspare.
Не забудьте согласовать свои настройки fcgi с настройками вашего рабочего Apache. Я обычно держу больше рабочих apache, чем рабочих fcgi ... они легче и будут ждать, пока освободится доступный воркер fcgi, чтобы обработать запрос, если параллелизм достигнет уровня выше, чем мой maxspare.
Хорошее объяснение. Однако не могли бы вы рассказать больше о maxrequests? Это моя самая большая проблема. Почему вы хотите, чтобы дочерний процесс умирал после определенного количества запросов? Для защиты от возможных утечек памяти?