студия открытых решений о-никс
<< Apache Watermark >>

Apache MPM

Apache сервер

Модуль Apache MPM расшифровывается как Apache Multi-Processing Module, что в переводе означает «Модуль мультипроцессовой обработки». Обычно по-умолчанию в Apache используется модуль MPM prefork.

Определить, какой именно менно модуль Apache MPM используется, можно следующей командой:

httpd -V | grep mpm
-D APACHE_MPM_DIR=»server/mpm/prefork»

Или на системах, подобных Debian, где сервер называется apache2:

apache2 -V | grep mpm
 -D APACHE_MPM_DIR="server/mpm/prefork"

Рассмотрим настройку параметров модуля Apache MPM prefork, исходя из объема оперативной памяти на хосте. Определим средний размер памяти, занимаемый одним процессом Apache:

ps -ylC httpd | awk '{x += $8;y += 1} END {print "Apache Memory Usage (MB): \
   "x/1024; print "Average Proccess Size (MB): "x/((y-1)*1024)}'

На системах, где сервер Apache представлен демоном apache2, замените в строке httpd на apache2.

Команда покажет общий объем памяти, потребляемой всеми процессами Apache и средний объем памяти на один процесс. Примеры:

[root@centos ~]# ps -ylC httpd | awk '{x += $8;y += 1} \
   END {print "Apache Memory Usage (MB): "x/1024; \
   print "Average Proccess Size (MB): "x/((y-1)*1024)}'
Apache Memory Usage (MB): 64.3789
Average Proccess Size (MB): 10.7298

В дистрибутивах, подобных Debian:

user@debian:~$ ps -ylC apache2 | awk '{x += $8;y += 1} \
   END {print "Apache Memory Usage (MB): "x/1024; \
   print "Average Proccess Size (MB): "x/((y-1)*1024)}'
Apache Memory Usage (MB): 231.531
Average Proccess Size (MB): 13.6195

Лучше эту команду выполнить несколько раз, и желательно тогда, когда ваш сервер будет находиться под максимальной нагрузкой, чтобы определить средние значения под нагрузкой.

Теперь, зная средний объем памяти, используемый сервером Apache, и зная объем физической памяти, можно вычислить значение MaxClients, которое задается в файле конфигурации сервера Apache httpd.conf.

Допустим, на вашем VPS или VDS сервере 1 Гб оперативной памяти, и вы хотите оставить 512 Мб для остальных процессов, отдав серверу Apache 512 Мб.

Предыдущая команда выдала результаты:

[root@centos ~]# ps -ylC httpd | awk '{x += $8;y += 1} \
   END {print "Apache Memory Usage (MB): "x/1024; \
   print "Average Proccess Size (MB): "x/((y-1)*1024)}'
Apache Memory Usage (MB): 64.3789
Average Proccess Size (MB): 10.7298

Т.е. на один процесс Apache в среднем уходит 10 Мб памяти. Определим значение MaxClients:

MaxClients = Весь объем памяти для Apache / Объем памяти на один процесс

MaxClients = 512 Мб / 10 МБ = 50.

Теперь мы знаем самое важное значение параметра модуля Apache MPM prefork, задающее максимальное число дочерних процессов таким, чтобы не была "съедена" вся оперативная память, а только часть ее (в нашем примере - половина, равная 512 Мб).

Внесем данные в файл настроки модуля Apache MPM prefork, обычно располагающийся по пути /etc/httpd/conf/httpd.conf:

<IfModule Mpm_prefork_module>
StartServers 2
MinSpareServers 2
MaxSpareServers 5
MaxClients 50
ServerLimit 50
MaxRequestsPerChild 100
</ IfModule>

KeepAlive Off 

Краткое описание параметров модуля Apache MPM Prefork:

StartServers - число дочерних процессов, создаваемых при запуске сервера.

MinSpareServers -  минимальное число неиспользуемых (запасных) дочерних процессов сервера, ожидающих потенциальные запросы.

MaxSpareServers — максимальное число запасных процессов, ожидающих потенциальные запросы. Если это число будет превышено, лишние процессы будут убиты.

MaxClients — самый важный параметр модуля MPM prefork, устанавливает верхний предел количества одновременно активных процессов. Именно от него зависит потребление памяти. Его значение перекрывает значение предыдущих параметров.

ServerLimit обычно равен MaxClients.

MaxRequestsPerChild - как часто сервер перерабатывает процессы, убивая старые и начиная (запуская) новые. Полезен при утечках памяти Apache и его библиотек.

KeepAlive - обеспечивает долгоживущие сессии HTTP, позволяющие отправлять несколько запросов через одно и то же соединение. Полезно включить, если страницы содержат много изображений.

Также есть хороший скрипт check_httpd_limits.pl, написанный на Perl, позволяющий определить, сколько памяти занимают процессы сервера Apache. Скрипт выдает предупреждения (или ошибки), если установленные в конфигурации Apache пределы памяти превышают размеры доступной памяти на сервере.

По мотивам источника: tune apache performance using mpm prefork module

<< Apache Watermark >>

Поделиться в соцсетях:

система комментирования CACKLE
RSS