Модуль предварительной вилки Apache. Процессы не разветвляются при большой нагрузке

У меня есть 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 МБ.

0
задан 31 May 2019 в 14:49
1 ответ

В дополнение к увеличению MaxClients и ServerLimit настройки до 512, вам также необходимо увеличить MaxRequestWorkers до 512 .

Цитата из прекрасного руководства :

... Сайты, которым необходимо обслуживать более 256 одновременных запросов, могут нуждаться в увеличении MaxRequestWorkers ...

И немного дальше:

MaxRequestWorkers Directive

Описание : Максимальное количество подключений, которые будут обрабатываться одновременно
Синтаксис: MaxRequestWorkers number

Директива MaxRequestWorkers устанавливает ограничение на количество одновременных запросов, которые будут обслуживаться. Любые попытки подключения сверх лимита MaxRequestWorkers обычно помещаются в очередь
...
Для непотоковых серверов (т.е. prefork) , MaxRequestWorkers преобразуется в максимальное количество дочерних процессов, которые будут запущены для обслуживания запросов. Значение по умолчанию - 256 ; чтобы увеличить его, необходимо также увеличить ServerLimit .

2
ответ дан 4 December 2019 в 13:20

Теги

Похожие вопросы