Расчет занчения MaxClients в Apache

Date: Mon, 21 Feb 2005 13:33:16 +0500
From: Igor Sysoev <http://sysoev.ru>;
Newsgroups: ftn.ru.unix.bsd
Subject: Расчет занчения MaxClients в Apache
> Всё же как правильно рассчитать значение MaxClients у апача?
> Совет, приведенный в «Performance Notes»
> ====
> control the MaxClients setting so that
> your server does not spawn so many children it starts swapping. The
> procedure for doing this is simple: determine the size of your average
> Apache process, by looking at your process list via a tool such as
> top, and divide this into your total available memory, leaving some
> room for other processes.
> ====
>
> явно не годится, потому что
>
> а) непонятно, следует смотреть колонку SIZE или RES для определения
> среднего размера апача и
>
> б) по всей видимости, код как-то шарится, потому что в реальности
> может быть значительно больше одновременных копий httpd, чем
> получается по данной формуле, и при этом даже будет свободная память.

Я обычно делаю так. Если машина выделяется под Апач, то берём top.

last pid: 31023; load averages: 0.81, 0.71, 0.60 up 5+20:44:24 13:26:21
52 processes: 1 running, 51 sleeping
CPU states: 24.1% user, 0.0% nice, 10.5% system, 3.5% interrupt, 61.9% idle
Mem: 48M Active, 644M Inact, 193M Wired, 27M Cache, 111M Buf, 85M Free
Swap: 1096M Total, 120K Used, 1096M Free

Смотрим, сколько запущено httpd. В данном случае — 32. Делим Active на 32,
получается ~1.5M на один процесс. Берём (Inact+Free) и делим на 1.5,
получается 486. То есть, примерно 500 апачей.

===========================================================

Апач при старте запускает столько процессов, сколько стоит в StartServers в конфиге.
В дальнейшей работе, если не хватает процессов для обработки всех запросов он порождает новые процессы до
значения MaxClients.
Когда нагрузка нормальная, количество процессов колеблется от MaxSpareServers до MinSpareServers.

Процессы убиваются менеджером после спада нагрузки если их > MaxSpareServers или
Если они обслужили запросов больше MaxRequestsPerChild (убиваются немедленно).

===========================================================

IS> KeepAlive имеет смысл ставить, если один сервер отдаёт и текст
IS> и картинки, тогда MSIE, а это >60% запросов (90% всего — 30% через
IS> прокси), будут качать страницу и картинки через одно соединение —
IS> быстрее будет отдаваться и на одного MSIE будет расходоваться
IS> один процесс Апача, а не 4 (обычно).
===========================================================

IS> Запускаешь /server-status, смотришь сколько idle servers.
IS> Если 0, то нужно увеличить MaxClients.
IS> Запускаешь top и смотришь, есть ли активный свопинг. Если нет,
IS> то можно по-маленьку (скажем, по 10) увеличивать MaxClients.
IS> Если есть свопинг и нет idle серверов, то нужно добавлять память.
IS> MaxRequestsPerChild можно сделать больших для обычного Апача
IS> и небольшим (порядка 300-500) для mod_perl’а. Хотя я размеры mod_perl’а
IS> ограничиваю с помощью Apache::SizeLimit, а не MaxRequestPerChild.
===========================================================

Обсуждение закрыто.