Apache prefork mpm windows

Apache MPM prefork

Description: Implements a non-threaded, pre-forking web server
Status: MPM
ModuleВ Identifier: mpm_prefork_module
SourceВ File: prefork.c

Summary

This Multi-Processing Module (MPM) implements a non-threaded, pre-forking web server. Each server process may answer incoming requests, and a parent process manages the size of the server pool. It is appropriate for sites that need to avoid threading for compatibility with non-thread-safe libraries. It is also the best MPM for isolating each request, so that a problem with a single request will not affect any other.

This MPM is very self-regulating, so it is rarely necessary to adjust its configuration directives. Most important is that MaxRequestWorkers be big enough to handle as many simultaneous requests as you expect to receive, but small enough to assure that there is enough physical RAM for all processes.

Topics

Directives

  • CoreDumpDirectory
  • EnableExceptionHook
  • Group
  • Listen
  • ListenBacklog
  • MaxConnectionsPerChild
  • MaxMemFree
  • MaxRequestWorkers
  • MaxSpareServers
  • MinSpareServers
  • PidFile
  • ReceiveBufferSize
  • ScoreBoardFile
  • SendBufferSize
  • ServerLimit
  • StartServers
  • User

Bugfix checklist

See also

How it Works

A single control process is responsible for launching child processes which listen for connections and serve them when they arrive. Apache httpd always tries to maintain several or idle server processes, which stand ready to serve incoming requests. In this way, clients do not need to wait for a new child processes to be forked before their requests can be served.

The StartServers , MinSpareServers , MaxSpareServers , and MaxRequestWorkers regulate how the parent process creates children to serve requests. In general, Apache httpd is very self-regulating, so most sites do not need to adjust these directives from their default values. Sites which need to serve more than 256 simultaneous requests may need to increase MaxRequestWorkers , while sites with limited memory may need to decrease MaxRequestWorkers to keep the server from thrashing (swapping memory to disk and back). More information about tuning process creation is provided in the performance hints documentation.

While the parent process is usually started as root under Unix in order to bind to port 80, the child processes are launched by Apache httpd as a less-privileged user. The User and Group directives are used to set the privileges of the Apache httpd child processes. The child processes must be able to read all the content that will be served, but should have as few privileges beyond that as possible.

MaxConnectionsPerChild controls how frequently the server recycles processes by killing old ones and launching new ones.

This MPM uses the mpm-accept mutex to serialize access to incoming connections when subject to the thundering herd problem (generally, when there are multiple listening sockets). The implementation aspects of this mutex can be configured with the Mutex directive. The performance hints documentation has additional information about this mutex.

Читайте также:  Autodesk maya для windows

MaxSpareServers Directive

Description: Maximum number of idle child server processes
Syntax: MaxSpareServers number
Default: MaxSpareServers 10
Context: server config
Status: MPM
Module: prefork

The MaxSpareServers directive sets the desired maximum number of idle child server processes. An idle process is one which is not handling a request. If there are more than MaxSpareServers idle, then the parent process will kill off the excess processes.

Tuning of this parameter should only be necessary on very busy sites. Setting this parameter to a large number is almost always a bad idea. If you are trying to set the value equal to or lower than MinSpareServers , Apache HTTP Server will automatically adjust it to MinSpareServers + 1 .

See also

MinSpareServers Directive

Description: Minimum number of idle child server processes
Syntax: MinSpareServers number
Default: MinSpareServers 5
Context: server config
Status: MPM
Module: prefork

The MinSpareServers directive sets the desired minimum number of idle child server processes. An idle process is one which is not handling a request. If there are fewer than MinSpareServers idle, then the parent process creates new children: It will spawn one, wait a second, then spawn two, wait a second, then spawn four, and it will continue exponentially until it is spawning 32 children per second. It will stop whenever it satisfies the MinSpareServers setting.

Tuning of this parameter should only be necessary on very busy sites. Setting this parameter to a large number is almost always a bad idea.

See also

Comments

Copyright 2020 The Apache Software Foundation.
Licensed under the Apache License, Version 2.0.

Настройка Apache prefork в httpd.conf

Модуль Мультипроцессовой Обработки (MPM – Multi-Processing Module) prefork осуществляет непереплетенный, предразветвляющийся web-сервер, который обращается с запросами подобно Apache 1.3. Это является необходимым для обеспечения совместимости с библиотеками.Также это лучший MPM для того, чтобы изолировать каждый запрос, так, чтобы проблема с единственным запросом не затронула никакой другой.MPM prefork очень автономный и редко возникает необходимость в изменении его настроек с умолчания (default).Самый важный параметр prefork MPM – это MaxClients!

КАК ЭТО РАБОТАЕТ:

Существует единственный основной (родительский) процесс, который ответственен за создание дочерних процессов, которые в свою очередь прислушиваются к связям и обрабатывают запросы клиента. Apache всегда пробует держать в запасе несколько неиспользуемых серверных процессов, которые готовы обработать поступающие запросы.Таким образом, клиенты не должны ждать создания новых дочерних процессов, которые будут разветвленны прежде, чем их запрос обслужится.Директивы StartServers, MinSpareServers, MaxSpareServers и MaxClients регулируют, как родительский процесс создает дочерние процессы, чтобы обслуживать запросы.

Вообще, Apache очень автономен, таким образом для большинство web-сайтов нет необходимости изменения этих дирректив от значений по умолчанию (default).

Для сайтов, которые должны обслуживать большее 256 одновременных запросов, возможно, следует увеличить MaxClients, а для сайтов, расположенных на серверах с ограниченной памятью, возможно, следует уменьшить значение MaxClients, чтобы не довести сервер до необходимости свапа памяти на диск (swapping memory to disk and back), что приведет к сильным замедлениям в работе.

Практически в самом начале основного конфигурационного файла httpd.conf мы видим следующее:

Читайте также:  Windows 10 крутятся точки

Теперь по порядку о каждой диррективе…

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 (по умолчанию)

Управляет, как часто сервер перерабатывает процессы, убивая старые и начиная (запуская) новые, т.е здесь указывается число запросов, которое позволено обрабатывать дочернему процессу до переполнения.

Читайте также:  Cups linux что это такое

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

Для запросов KeepAlive, только первый запрос подсчывается к пределу MaxRequestsPerChild. В действительности, это меняет действие ограничения числа связей с дочерним процессом.

Неиспользуемый (idle) процесс – тот, который не обращается с запросом.

Apache MPM

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Оцените статью