Назад | Перейти на главную страницу

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

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