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

Оптимизация предварительной вилки Apache - выбор правильного значения MaxRequestsPerChild

Я пытаюсь оптимизировать наши веб-серверы, чтобы обрабатывать как можно больше подключений. Я прочитал много сообщений и заметок об Apache. Я пытаюсь понять, какое значение выбрать для MaxRequestsPerChild.

Сначала я попытался установить его на 4000, но у сервера возникли проблемы с обработкой большого количества запросов, поэтому я начал поднимать его. На данный момент мои настройки:

<IfModule prefork.c>
StartServers       8
MinSpareServers    5
MaxSpareServers   20
ServerLimit      256
MaxClients       256
MaxRequestsPerChild  40000
</IfModule>

После установки MaxRequestsPerChild до 40 000 серверу удалось обработать больше подключений, не используя при этом больше памяти / процессора.

Кто-нибудь может сказать мне, пожалуйста, является ли это значение слишком высоким или это нормально иметь такое высокое значение?

Спасибо!

Информация об ОС:

[root@web06 ~]# uname -a
Linux web 2.6.18-164.el5PAE #1 SMP Thu Sep 3 04:10:44 EDT 2009 i686 i686 i386 GNU/Linux
[root@web06 ~]# free
             total       used       free     shared    buffers     cached
Mem:       3814660    3502968     311692          0     144368    2970468
-/+ buffers/cache:     388132    3426528
Swap:      5210104          0    5210104

MaxRequestsPerChild действительно полезен только для ограничения объема утечки памяти с течением времени при запуске динамических сценариев. Если вы просто обслуживаете статический контент или очень маленькие / простые скрипты, вы, вероятно, можете установить его на 0 или очень высокий без особого эффекта. Если вы запускаете более крупные / сложные сценарии, то установка 0 / высокий приведет к тому, что процессы Apache будут потреблять все больше и больше памяти. Насколько больше зависит от вашего конкретного приложения.

С другой стороны, установка очень низкого уровня может фактически привести к немного большей загрузке ЦП, поскольку процессы Apache постоянно перезапускаются.

Я бы провел простой тест, чтобы узнать, сколько памяти могут использовать ваши процессы. Устанавливать MaxRequestsPerChild на 0 и перезапустите Apache. Протестируйте загрузите несколько страниц и посмотрите, какой исходный размер используют процессы Apache top. Проверьте еще раз через несколько часов / дней / недель (в зависимости от вашего приложения и просмотров страниц) и посмотрите, как он растет. Если он не растет очень сильно, то 0 или очень большое значение для MaxRequestsPerChild все должно быть в порядке.

Если у вас установлен максимальный размер для ваших процессов Apache (т.е. вы хотите, чтобы они составляли 50 МБ или меньше), вы можете выполнить тот же тест с различными значениями MaxRequestsPerChild пока вы не найдете значение, при котором Apache будет меньше этого.