Apache. Документация на русском


Разделы:   1    2    3    4    5    6    7    8    9      10      11    12    13    14    15    16  

Раздел 10. Модули Апача

Пункты:   85    86    88    89    90    91    92    93      94      95    96    97    98    99    100    101    102    103    104    105    106    107    108    109    110    111    112    113    114    115    116    117    118    119    120    121    122    123    124    125    126    127    128    129    130    131    132    133    134    135    136    137    138    139    140    141    142    143    144    145    146    147    148    149    150    151    152    153    154    155    156    157    158    159    160    161    163    164    165    166    167    168    170    171    172    173    174    175    176    177    178    179    180    181    182    183    184    185    186    187    188    189    190    191    192    193    194    195    196    197    198    199    200    201    203    204    205    206    207    208    209    210    211    212    213  

 <         > 
  RU            EN  

Пункт 94. Работа Apache MPM

Этот многопроцессорный модуль (MPM) реализует гибридный многопроцессорный многопоточный сервер. Используя потоки для обслуживания запросов, он может обслуживать большое количество запросов с меньшими системными ресурсами, чем сервер, основанный на процессах. Тем не менее, он сохраняет большую часть стабильности сервера, основанного на процессах, сохраняя доступными несколько процессов, каждый из которых имеет множество потоков.

Наиболее важными директивами, используемыми для управления этим MPM, являются ThreadsPerChild , которая управляет количеством потоков, развернутых каждым дочерним процессом, и MaxRequestWorkers , которая управляет максимальным общим количеством потоков, которые могут быть запущены.

Как это работает

Один управляющий процесс (родительский) отвечает за запуск дочерних процессов. Каждый дочерний процесс создает фиксированное количество серверных потоков, как указано в ThreadsPerChild директиве, а также поток слушателя, который прослушивает соединения и передает их серверному потоку для обработки, когда они прибывают.

HTTP-сервер Apache всегда пытается поддерживать пул резервных или бездействующих серверных потоков, готовых обслуживать входящие запросы. Таким образом, клиентам не нужно ждать создания новых потоков или процессов, прежде чем их запросы смогут быть обслужены. Количество процессов, которые будут первоначально запущены, задается директивой StartServers . Во время работы сервер оценивает общее количество простаивающих потоков во всех процессах и разветвляет или уничтожает процессы, чтобы удерживать это количество в границах, заданных параметрами MinSpareThreads и MaxSpareThreads . Поскольку этот процесс очень саморегулирующийся, редко возникает необходимость изменять эти директивы по сравнению со значениями по умолчанию. Максимальное количество клиентов, которые могут обслуживаться одновременно (т. е. максимальное общее количество потоков во всех процессах), определяется директивой MaxRequestWorkers . Максимальное количество активных дочерних процессов определяется MaxRequestWorkers делением директивы на ThreadsPerChild директиву.

Две директивы устанавливают жесткие ограничения на количество активных дочерних процессов и количество серверных потоков в дочернем процессе, и их можно изменить, только полностью остановив сервер, а затем снова запустив его. ServerLimit является жестким ограничением на количество активных дочерних процессов и должно быть больше или равно директиве, MaxRequestWorkers деленной на ThreadsPerChild директиву. ThreadLimit является жестким ограничением количества потоков сервера и должно быть больше или равно директиве ThreadsPerChild .

В дополнение к набору активных дочерних процессов могут быть дополнительные дочерние процессы, которые завершаются, но по крайней мере один поток сервера все еще обрабатывает существующее клиентское соединение. MaxRequestWorkers Могут присутствовать вплоть до завершающих процессов, хотя можно ожидать, что фактическое число будет намного меньше. Этого поведения можно избежать, отключив завершение отдельных дочерних процессов, что достигается с помощью следующего:

  • установить значение MaxConnectionsPerChild на ноль
  • установите значение MaxSpareThreads на то же значение, что и MaxRequestWorkers

Типичная конфигурация элементов управления потоком процесса в worker MPM может выглядеть следующим образом:

 Ограничение сервера 16
Стартовые серверы 2
Максрекуестворкерс 150
Минспаретредс 25
Максспаретредс 75
ThreadsPerChild 25 

В то время как родительский процесс обычно запускается, как root в Unix, для привязки к порту 80, дочерние процессы и потоки запускаются сервером как менее привилегированный пользователь. Директивы User и Group используются для установки привилегий дочерних процессов Apache HTTP Server. Дочерние процессы должны иметь возможность читать весь контент, который будет обслуживаться, но должны иметь как можно меньше дополнительных привилегий. Кроме того, если suexec не используется, эти директивы также устанавливают привилегии, которые будут унаследованы сценариями CGI.

MaxConnectionsPerChild контролирует, как часто сервер перезапускает процессы, убивая старые и запуская новые.

Этот MPM использует mpm-accept мьютекс для сериализации доступа к входящим соединениям, когда возникает проблема громогласного стада (как правило, при наличии нескольких прослушивающих сокетов). Аспекты реализации этого мьютекса можно настроить с помощью директивы Mutex . В документации по рекомендациям по производительности есть дополнительная информация об этом мьютексе.



 <         > 

Пункты:   85    86    88    89    90    91    92    93      94      95    96    97    98    99    100    101    102    103    104    105    106    107    108    109    110    111    112    113    114    115    116    117    118    119    120    121    122    123    124    125    126    127    128    129    130    131    132    133    134    135    136    137    138    139    140    141    142    143    144    145    146    147    148    149    150    151    152    153    154    155    156    157    158    159    160    161    163    164    165    166    167    168    170    171    172    173    174    175    176    177    178    179    180    181    182    183    184    185    186    187    188    189    190    191    192    193    194    195    196    197    198    199    200    201    203    204    205    206    207    208    209    210    211    212    213  

Рейтинг@Mail.ru