Leon1010

Я в Соц.сетях:

Теги:

Ссылки

Настройка Apache prefork в httpd.conf

Модуль Мультипроцессовой Обработки (MPM — Multi-Processing Module) prefork осуществляет непереплетенный, предразветвляющийся web-сервер, который обращается с запросами подобно Apache 1.3. Это является необходимым для обеспечения совместимости с библиотеками.
Также это лучший MPM для того, чтобы изолировать каждый запрос, так, чтобы проблема с единственным запросом не затронула никакой другой.
MPM prefork очень автономный и редко возникает необходимость в изменении его настроек с умолчания (default).
Самый важный параметр prefork MPM — это MaxClients!

КАК ЭТО РАБОТАЕТ:
Существует единственный основной (родительский) процесс, который ответственен за создание дочерних процессов, которые в свою очередь прислушиваются к связям и обрабатывают запросы клиента. Apache всегда пробует держать в запасе несколько неиспользуемых серверных процессов, которые готовы обработать поступающие запросы.
Таким образом, клиенты не должны ждать создания новых дочерних процессов, которые будут разветвленны прежде, чем их запрос обслужится.
Директивы StartServersMinSpareServersMaxSpareServers и MaxClients регулируют, как родительский процесс создает дочерние процессы, чтобы обслуживать запросы.

Вообще, Apache очень автономен, таким образом для большинство web-сайтов нет необходимости изменения этих дирректив от значений по умолчанию (default).

Для сайтов, которые должны обслуживать большее 256 одновременных запросов, возможно, следует увеличить MaxClients, а для сайтов, расположенных на серверах с ограниченной памятью, возможно, следует уменьшить значение MaxClients, чтобы не довести сервер до необходимости свапа памяти на диск (swapping memory to disk and back), что приведет к сильным замедлениям в работе.

Практически в самом начале основного конфигурационного файла httpd.conf мы видим следующее:

# TimeOut: The number of seconds before receives and sends time out.
TimeOut  300

# KeepAlive: Whether or not to allow persistent connections (more than
 # one request per connection). Set to "Off" to deactivate.
KeepAlive  On

# MaxKeepAliveRequests: The maximum number of requests to allow
 # during a persistent connection. Set to 0 to allow an unlimited amount.
 # We recommend you leave this number high, for maximum performance.
MaxKeepAliveRequests  100

# KeepAliveTimeout: Number of seconds to wait for the next request from the
 # same client on the same connection.
KeepAliveTimeout  15

## Server-Pool Size Regulation (MPM specific)

 # prefork MPM
 # StartServers: number of server processes to start
 # MinSpareServers: minimum number of server processes which are kept spare
 # MaxSpareServers: maximum number of server processes which are kept spare
 # ServerLimit: maximum value for MaxClients for the lifetime of the server
 # MaxClients: maximum number of server processes allowed to start
 # MaxRequestsPerChild: maximum number of requests a server process serves
<IfModule prefork.c>
 StartServers	5
 MinSpareServers	5
 MaxSpareServers	10
 ServerLimit	256
 MaxClients	256
 MaxRequestsPerChild  	10000
</IfModule>

Теперь по порядку о каждой диррективе…

TimeOut   300 (по умолчанию)
Время ожидания (в секундах), прежде чем попытки приема или отправления выдают сообщение о тайм-ауте.

KeepAlive   On (по умолчанию)
Допускаются ли персистентные соединения. Для запрета укажите Off.
Персистентное соединение (persistent connection, keep-alive) — тип виртуального соединения между сервером и клиентом, при котором сервер может обслуживать более одного запроса от одного и того же клиента в рамках одного и того же соединения, т.е. которое не завершается сразу, как только сервер обслужил тот первый запрос клиента, ради которого данное соединение было установлено, а ждет поступления дальнейших запросов по тому же каналу.

MaxKeepAliveRequests   100 (по умолчанию)
Максимальное количество запросов при одном персистентном соединении.
Значение 0 снимает ограничения (разрешено неограниченное количество запросов).
Для максимального быстродействия рекомендуется высокое значение.

KeepAliveTimeout   15 (по умолчанию)
Время ожидания (в секундах) следующего запроса от того же клиента в рамках одного персистентного соединения.

StartServers   5 (по умолчанию)
Директива StartServers устанавливает число дочерних процессов, созданных при запуске сервера.
Поскольку число процессов динамически меняется в зависимости от нагрузки, то обычно нет необходимости настраивать этот параметр.

MinSpareServers   5 (по умолчанию)
Директива MinSpareServers устанавливает желательное минимальное число неиспользуемых* дочерних процессов сервера.
Если свободных процессов меньше, чем значение MinSpareServers, то родительский процесс создает новые дочерние процессы с максимальной частотой по 1 в секунду.
Настройка этого параметра необходима только на очень загруженных сайтах.
Увеличение этого параметра к большому числу — почти всегда плохая идея!

MaxSpareServers   10 (по умолчанию)
Директива MaxSpareServers устанавливает желательное максимальное число неиспользуемых* дочерних процессов сервера.
Если есть больше чем MaxSpareServers неиспользуемых процессов, то родительский процесс убьет лишние.
Настройка этого параметра необходима только на очень загруженных сайтах. Увеличение этого параметра к большому числу — почти всегда плохая идея!
Если попытаться установить значение ниже, чем MinSpareServers, то Apache автоматически присвоит это к MinSpareServers + 1.

ServerLimit
Для prefork MPM эта директива устанавливает максимальное значение MaxClients на протяжении всей жизни процесса сервера Apache.
Используя эту директиву будте особенно осторожны!
Если значение ServerLimit установить намного выше необходимого, то свободная совместно используемая память будет занята (ассигнована, allocated).
Если ServerLimit и MaxClients установить выше, чем система может обрабатывать, то Apache может не запустится или система станет нестабильной.
Используйте эту директиву с prefork MPM, только если Вы хотите установить MaxClients выше чем 256 (default).
Не устанавливайте значение этой директивы ни на сколько выше чем значение, установленное в MaxClients.
У ServerLimit предельное значение 20000, даже, если указать больше (для избежания нежелательных эффектов, вызванных опечатками).

MaxClients
Это самый важный параметр prefork MPM, задающий максимальное число дочерних процессов, которым разрешено запустится (которые будут созданы для обработки запросов).
Значение выставляется большим, чтобы обрабатывать одновременно много запросов, а меньшим для снижения потребления памяти!
Сколько Вы укажите в этой диррективе, столько и будет у Вас процессов вставать в очередь на выполнение.

MaxRequestsPerChild   10000 (по умолчанию)
Управляет, как часто сервер перерабатывает процессы, убивая старые и начиная (запуская) новые, т.е здесь указывается число запросов, которое позволено обрабатывать дочернему процессу до переполнения.
Эта дирректива полезна для того, чтобы избежать проблем при длительной непрерывной работе, если Apache (или используемые им библиотеки), допускают утечку памяти или других ресурсов, так как при переполнении дочерний процесс будет принудительно завершен.
На большинстве систем это не требуется, но некоторые страдают заметными утечками в библиотеках.
Установка значения в 0 снимает ограничения.
Для запросов KeepAlive, только первый запрос подсчывается к пределу MaxRequestsPerChild. В действительности, это меняет действие ограничения числа связей с дочерним процессом.

Итак, регулируя значения этих дирректив, можно добиться существенного увеличения скорости работы Вашего сайта или, наоборот, замедлить его и вызвать нестабильность системы. :)
Успехов!

Запись опубликована в рубрике Администрирование с метками .