У меня есть http-сервер модуля prefork apache, работающий на Linux-машине. У машины 8 ГБ оперативной памяти. В моем /etc/httpd/conf/httpd.conf есть следующее:
<IfModule prefork.c>
StartServers 8
MinSpareServers 5
MaxSpareServers 20
ServerLimit 512
MaxClients 512
MaxRequestsPerChild 4000
</IfModule>
Проблема в том, что после 256 дочерние процессы больше не разветвляются, а запросы ставятся в очередь. Я вижу количество дочерних процессов, застрявших на 256 при большой нагрузке.
Средняя память процесса httpd составляет около 3,69 МБ.
Помимо увеличения MaxClients
и ServerLimit
настройки до 512 тоже нужно поднять MaxRequestWorkers
к 512
.
Цитируется из прекрасное руководство:
... Сайтам, которым необходимо обслуживать более 256 одновременных запросов, может потребоваться увеличение
MaxRequestWorkers
...
И еще немного:
Директива MaxRequestWorkers
Описание: Максимальное количество подключений, которые будут обрабатываться одновременно
Синтаксис:MaxRequestWorkers number
В
MaxRequestWorkers
Директива устанавливает ограничение на количество одновременных запросов, которые будут обслуживаться. Любые попытки подключения черезMaxRequestWorkers
лимит обычно ставится в очередь
...
Для непотоковые серверы (например, prefork),MaxRequestWorkers
переводится в максимальное количество дочерних процессов, которые будут запущены для обслуживания запросов. В значение по умолчанию 256; для его увеличения необходимо также поднятьServerLimit
.