У меня есть http-сервер модуля предварительной вилки 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 Directive
Описание : Максимальное количество подключений, которые будут обрабатываться одновременно
Синтаксис:MaxRequestWorkers number
Директива
MaxRequestWorkers
устанавливает ограничение на количество одновременных запросов, которые будут обслуживаться. Любые попытки подключения сверх лимитаMaxRequestWorkers
обычно помещаются в очередь
...
Для непотоковых серверов (т.е. prefork) ,MaxRequestWorkers
преобразуется в максимальное количество дочерних процессов, которые будут запущены для обслуживания запросов. Значение по умолчанию - 256 ; чтобы увеличить его, необходимо также увеличитьServerLimit
.