Основные параметры с которыми приходится сталкиваться — TimeOut, KeepAlive, StartServers, MaxKeepAliveRequests, KeepAliveTimeout, MinSpareServers, MaxSpareServers, ServerLimit, MaxClients, MaxRequestsPerChild.
Периодически приходится вспоминать для чего нужен тот или иной параметр, в связи с чем пишу описания ниже:
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. В действительности, это меняет действие ограничения числа связей с дочерним процессом.