Общие директивы MPM Apache
| Описание: | Набор директив, реализованных более чем одним модулем многопроцессорной обработки (MPM) |
|---|---|
| Статус: | MPM |
Директива CoreDumpDirectory
| Описание: | Каталог, в который Apache HTTP Server пытается перейти перед созданием дампа памяти |
|---|---|
| Синтаксис: | CoreDumpDirectory directory |
| Значение по умолчанию: | See usage for the default setting |
| Контекст: | конфигурация сервера |
| Статус: | MPM |
| Модуль: |
event, worker, prefork
|
Эта директива задаёт каталог, в который Apache httpd пытается перейти перед созданием дампа памяти. Если операционная система настроена на создание файлов дампа в рабочем каталоге аварийно завершившегося процесса, необходимо использовать CoreDumpDirectory, чтобы изменить рабочий каталог с каталога ServerRoot по умолчанию, в который не должен иметь права записи пользователь, от имени которого работает сервер.
Если для отладки вам нужен дамп памяти, с помощью этой директивы можно сохранить его в другом месте. Директива не действует, если операционная система не настроена на запись файлов дампа в рабочий каталог аварийно завершившихся процессов.
Замечание о безопасности для систем Linux
Использование этой директивы в Linux может позволить другим процессам системы (если они выполняются с аналогичными привилегиями, например сценариям CGI) подключаться к дочерним процессам httpd с помощью системного вызова ptrace. Это может ослабить защиту от некоторых атак на безопасность. Не рекомендуется использовать эту директиву в производственных системах.
Дампы памяти в Linux
Если Apache httpd запускается от имени root, а затем переключается на другого пользователя, ядро Linux отключает создание дампов памяти, даже если процессу доступна запись в каталог. Apache httpd (версия 2.0.46 и более поздние) повторно включает создание дампов памяти в Linux 2.4 и более поздних версиях, но только если вы явно настроите CoreDumpDirectory.
Дампы памяти в BSD
Чтобы включить создание дампов памяти для suid-исполняемых файлов в системах BSD (например, FreeBSD), установите kern.sugid_coredump в значение 1.
Определённые сигналы
Обработка CoreDumpDirectory выполняется только для выбранного набора фатальных сигналов: SIGFPE, SIGILL, SIGABORT, SIGSEGV и SIGBUS.
В некоторых операционных системах SIGQUIT также приводит к созданию дампа памяти, но не проходит обработку CoreDumpDirectory или EnableExceptionHook, поэтому расположение дампа полностью определяется операционной системой.
Директива EnableExceptionHook
| Описание: | Включает хук, запускающий обработчики исключений после сбоя |
|---|---|
| Синтаксис: | EnableExceptionHook On|Off |
| Значение по умолчанию: | EnableExceptionHook Off |
| Контекст: | конфигурация сервера |
| Статус: | MPM |
| Модуль: |
event, worker, prefork
|
По соображениям безопасности эта директива доступна только в том случае, если сервер был собран с параметром --enable-exception-hook. Она включает хук, позволяющий внешним модулям подключаться и выполнять действия после сбоя дочернего процесса.
Этим хуком уже пользуются два модуля: mod_whatkilledus и mod_backtrace. Дополнительную информацию о них можно найти на сайте EnableExceptionHook Джеффа Травика.
Директива GracefulShutdownTimeout
| Описание: | Задаёт время ожидания, по истечении которого корректно останавливаемый сервер завершит работу. |
|---|---|
| Синтаксис: | GracefulShutdownTimeout seconds |
| Значение по умолчанию: | GracefulShutdownTimeout 0 |
| Контекст: | конфигурация сервера |
| Статус: | MPM |
| Модуль: |
event, worker, prefork
|
| Совместимость: | Доступна в версии 2.2 и более поздних |
Директива GracefulShutdownTimeout задаёт, сколько секунд после получения сигнала "graceful-stop" сервер должен продолжать работу, обслуживая существующие соединения.
Значение 0 означает, что сервер будет бесконечно ждать завершения обработки всех оставшихся запросов.
Директива Listen
| Описание: | IP-адреса и порты, на которых сервер ожидает подключения |
|---|---|
| Синтаксис: | Listen [IP-address:]portnumber [protocol] |
| Контекст: | конфигурация сервера |
| Статус: | MPM |
| Модуль: |
event, worker, prefork, mpm_winnt, mpm_netware, mpmt_os2
|
| Совместимость: | Аргумент protocol добавлен в версии 2.1.5 |
Директива Listen указывает Apache httpd ожидать подключения только на определённых IP-адресах или портах; по умолчанию сервер отвечает на запросы, поступающие через все IP-интерфейсы. Теперь директива Listen обязательна. Если её нет в файле конфигурации, сервер не запустится. Это изменение по сравнению с предыдущими версиями Apache httpd.
Директива Listen указывает серверу принимать входящие запросы на заданном порту или сочетании адреса и порта. Если задан только номер порта, сервер ожидает подключения на этом порту через все интерфейсы. Если вместе с портом указан IP-адрес, сервер будет ожидать подключения на указанном порту и интерфейсе.
Для указания нескольких адресов и портов можно использовать несколько директив Listen. Сервер будет отвечать на запросы, поступающие с любого из перечисленных адресов и портов.
Например, чтобы сервер принимал подключения на портах 80 и 8000, используйте:
Listen 80 Listen 8000
Чтобы сервер принимал подключения на двух заданных интерфейсах и портах, используйте
Listen 192.170.2.1:80 Listen 192.170.2.5:8000
IPv6-адреса необходимо заключать в квадратные скобки, как в следующем примере:
Listen [2001:db8::a00:20ff:fea7:ccea]:80
Необязательный аргумент protocol в большинстве конфигураций не требуется. Если он не задан, по умолчанию для порта 443 используется https, а для всех остальных портов — http. Протокол используется для определения модуля, который должен обрабатывать запрос, а также для применения оптимизаций, специфичных для протокола, с помощью директивы AcceptFilter.
Указывать протокол нужно только при использовании нестандартных портов. Например, для сайта https на порту 8443:
Listen 192.170.2.1:8443 https
Условие ошибки
Несколько директивListen для одного и того же IP-адреса и порта приведут к сообщению об ошибке Address already in use. См. также
Директива ListenBackLog
| Описание: | Максимальная длина очереди ожидающих подключений |
|---|---|
| Синтаксис: | ListenBackLog backlog |
| Значение по умолчанию: | ListenBackLog 511 |
| Контекст: | конфигурация сервера |
| Статус: | MPM |
| Модуль: |
event, worker, prefork, mpm_winnt, mpm_netware, mpmt_os2
|
Максимальная длина очереди ожидающих подключений. Обычно настраивать этот параметр не нужно и не рекомендуется; однако в некоторых системах его следует увеличить при атаке типа TCP SYN flood. См. параметр backlog системного вызова listen(2).
Операционная система часто ограничивает это значение меньшим числом. Ограничения различаются в разных ОС. Кроме того, многие ОС используют не точное значение backlog, а значение, рассчитанное на его основе (обычно большее).
Директива ListenCoresBucketsRatio
| Описание: | Соотношение количества ядер ЦП (в сети) и количества корзин прослушивателей |
|---|---|
| Синтаксис: | ListenCoresBucketsRatio ratio |
| Значение по умолчанию: | ListenCoresBucketsRatio 0 (disabled) |
| Контекст: | конфигурация сервера |
| Статус: | MPM |
| Модуль: |
event, worker, prefork
|
| Совместимость: | Доступна в Apache HTTP Server 2.4.17 при условии, что ядро поддерживает параметр сокета SO_REUSEPORT и равномерно распределяет с его помощью новые подключения между сокетами процессов (или потоков), ожидающих подключения (например, в Linux 3.9 и более поздних версиях, но не в текущих реализациях SO_REUSEPORT в *BSD). |
Соотношение ratio между количеством ядер ЦП (в сети) и числом корзин прослушивателей можно использовать, чтобы Apache HTTP Server создавал num_cpu_cores / ratio корзин ожидания подключений, каждая из которых содержит собственные сокеты Listen на тех же портах, а затем назначал каждому дочернему процессу одну корзину (корзины распределяются по кругу при создании дочерних процессов).
Что означает «ядро ЦП в сети»
В Linux (а также BSD) ядро ЦП можно включать и отключать, если настроена функция Hotplug, поэтому ListenCoresBucketsRatio должна учитывать этот параметр при вычислении количества создаваемых корзин.
ListenCoresBucketsRatio может повысить масштабируемость, если приём новых подключений становится или может стать узким местом. Испытания показали, что на системах с большим количеством ядер ЦП включение этой функции значительно повышает производительность и сокращает время отклика.
Чтобы эта функция работала, количество ядер ЦП должно как минимум вдвое превышать заданное значение ratio. Рекомендуемое значение ratio — 8, поэтому при его использовании во время работы должно быть доступно не менее 16 ядер. Чтобы добиться максимальной производительности, значение ratio следует подобрать для каждой целевой системы, проверяя различные значения и отслеживая изменения ключевых показателей производительности.
Эта директива влияет на вычисление нижних предельных значений MinSpareThreads и MaxSpareThreads. Для оптимального приёма подключений количество дочерних процессов должно быть кратно количеству корзин.
Несколько Listenеров или серверов Apache HTTP на одном IP-адресе и порту
Установка параметра SO_REUSEPORT для сокета (или сокетов), ожидающих подключения, позволяет нескольким процессам (использующим один и тот же EUID, например root) привязываться к одному и тому же IP-адресу и порту без ошибки привязки, обычно выдаваемой системой.
Это также означает, что несколько экземпляров Apache httpd, настроенных на одном и том же IP:port с положительным значением ListenCoresBucketsRatio, запустятся без ошибки и будут равномерно распределять входящие подключения между собой (это НЕ рекомендация и не разумный способ использования, а лишь примечание о том, что такая конфигурация помешает обнаружить возможные проблемы).
В одном экземпляре Apache httpd проверит конфигурацию и откажется запускаться, если несколько директив Listen заданы для одного и того же IP-адреса (или имени узла) и порта. Это предотвращает создание ненужных дублирующихся корзин, снижающих производительность. Однако сервер не может (и не будет пытаться) выявлять все возможные случаи перекрытия, например имя узла, разрешающееся в IP-адрес, уже используемый в другом месте.
Директива MaxConnectionsPerChild
| Описание: | Ограничение количества подключений, которые отдельный дочерний процесс сервера обработает за время своей работы |
|---|---|
| Синтаксис: | MaxConnectionsPerChild number |
| Значение по умолчанию: | MaxConnectionsPerChild 0 |
| Контекст: | конфигурация сервера |
| Статус: | MPM |
| Модуль: |
event, worker, prefork, mpm_winnt, mpm_netware, mpmt_os2
|
| Совместимость: | Доступна в Apache HTTP Server 2.3.9 и более поздних версиях. Старое имя MaxRequestsPerChild по-прежнему поддерживается. |
Директива MaxConnectionsPerChild задаёт ограничение количества подключений, которые обработает отдельный дочерний процесс сервера. После MaxConnectionsPerChild подключений дочерний процесс завершится. Если MaxConnectionsPerChild равно 0, срок работы процесса не ограничен.
Установка ненулевого значения MaxConnectionsPerChild ограничивает объём памяти, который может потреблять процесс из-за (случайной) утечки памяти.
Директива MaxMemFree
| Описание: | Максимальный объём памяти, который основной распределитель может удерживать, не вызывая free()
|
|---|---|
| Синтаксис: | MaxMemFree KBytes |
| Значение по умолчанию: | MaxMemFree 2048 |
| Контекст: | конфигурация сервера |
| Статус: | MPM |
| Модуль: |
event, worker, prefork, mpm_winnt, mpm_netware
|
Директива MaxMemFree задаёт максимальное количество свободных килобайт, которое может удерживать каждый распределитель, не вызывая free(). В многопоточных MPM каждый поток имеет собственный распределитель. При значении 0 порог не ограничен.
Директива MaxRequestWorkers
| Описание: | Максимальное количество подключений, обрабатываемых одновременно |
|---|---|
| Синтаксис: | MaxRequestWorkers number |
| Значение по умолчанию: | See usage for details |
| Контекст: | конфигурация сервера |
| Статус: | MPM |
| Модуль: |
event, worker, prefork
|
Директива MaxRequestWorkers задаёт предел количества одновременно обслуживаемых запросов. Обычно попытки подключений, превышающие предел MaxRequestWorkers, помещаются в очередь, размер которой зависит от директивы ListenBacklog. Когда дочерний процесс освободится после завершения обработки другого запроса, подключение будет обслужено.
Для непотоковых серверов (т. е. prefork) MaxRequestWorkers определяет максимальное количество дочерних процессов, запускаемых для обслуживания запросов. Значение по умолчанию — 256; чтобы увеличить его, необходимо также увеличить ServerLimit.
Для потоковых и гибридных серверов (например event или worker) MaxRequestWorkers ограничивает общее количество потоков, доступных для обслуживания клиентов. Для гибридных MPM значение по умолчанию равно 16 (ServerLimit), умноженному на значение 25 (ThreadsPerChild). Поэтому, чтобы увеличить MaxRequestWorkers до значения, требующего более 16 процессов, необходимо также увеличить ServerLimit.
До версии 2.3.13 директива MaxRequestWorkers называлась MaxClients. Старое имя по-прежнему поддерживается.
Директива MaxSpareThreads
| Описание: | Максимальное количество простаивающих потоков |
|---|---|
| Синтаксис: | MaxSpareThreads number |
| Значение по умолчанию: | See usage for details |
| Контекст: | конфигурация сервера |
| Статус: | MPM |
| Модуль: |
event, worker, mpm_netware, mpmt_os2
|
Максимальное количество простаивающих потоков. Разные MPM обрабатывают эту директиву по-разному.
Для worker и event значение по умолчанию — MaxSpareThreads 250. Эти MPM учитывают простаивающие потоки для всего сервера. Если на сервере слишком много простаивающих потоков, дочерние процессы завершаются, пока их количество не станет меньше этого значения. Если включена директива ListenCoresBucketsRatio, могут создаваться дополнительные процессы или потоки.
Для mpm_netware значение по умолчанию — MaxSpareThreads 100. Поскольку этот MPM работает в одном процессе, количество резервных потоков также учитывается для всего сервера.
mpmt_os2 работает аналогично mpm_netware. Для mpmt_os2 значение по умолчанию — 10.
Ограничения
Диапазон допустимых значений MaxSpareThreads ограничен. Apache httpd автоматически скорректирует заданное значение согласно следующим правилам:
-
mpm_netwareтребует, чтобы значение было большеMinSpareThreads. - Для
workerиeventзначение должно быть не меньше суммыMinSpareThreadsиThreadsPerChild.
См. также
Директива MinSpareThreads
| Описание: | Минимальное количество простаивающих потоков, доступных для обработки всплесков запросов |
|---|---|
| Синтаксис: | MinSpareThreads number |
| Значение по умолчанию: | See usage for details |
| Контекст: | конфигурация сервера |
| Статус: | MPM |
| Модуль: |
event, worker, mpm_netware, mpmt_os2
|
Минимальное количество простаивающих потоков для обработки всплесков запросов. Разные MPM обрабатывают эту директиву по-разному.
Для worker и event значение по умолчанию равно MinSpareThreads 75; простаивающие потоки учитываются для всего сервера. Если на сервере недостаточно простаивающих потоков, создаются дочерние процессы, пока их количество не превысит number. Если включена директива ListenCoresBucketsRatio, могут создаваться дополнительные процессы или потоки.
Для mpm_netware значение по умолчанию равно MinSpareThreads 10. Поскольку это однопроцессный MPM, число потоков учитывается для всего сервера.
mpmt_os2 работает аналогично mpm_netware. Для mpmt_os2 значение по умолчанию — 5.
См. также
Директива PidFile
| Описание: | Файл, в который сервер записывает идентификатор процесса демона |
|---|---|
| Синтаксис: | PidFile filename |
| Значение по умолчанию: | PidFile logs/httpd.pid |
| Контекст: | конфигурация сервера |
| Статус: | MPM |
| Модуль: |
event, worker, prefork, mpm_winnt, mpmt_os2
|
Директива PidFile задаёт файл, в который сервер записывает идентификатор процесса демона. Если указано относительное имя файла, оно считается относительно ServerRoot.
Пример
PidFile /var/run/apache.pid
Часто бывает полезно иметь возможность отправить серверу сигнал, чтобы он закрыл, а затем повторно открыл свои ErrorLog и TransferLog и перечитал файлы конфигурации. Для этого процессу, идентификатор которого указан в PidFile, отправляют сигнал SIGHUP (kill -1).
К PidFile применяются те же предостережения, что и к размещению файлов журналов, а также рекомендации по безопасности.
Примечание
Начиная с Apache HTTP Server 2 рекомендуется использовать только сценарий apachectl или сценарий init, предоставляемый вашей ОС, для запуска, перезапуска и остановки сервера.
Директива ReceiveBufferSize
| Описание: | Размер буфера приёма TCP |
|---|---|
| Синтаксис: | ReceiveBufferSize bytes |
| Значение по умолчанию: | ReceiveBufferSize 0 |
| Контекст: | конфигурация сервера |
| Статус: | MPM |
| Модуль: |
event, worker, prefork, mpm_winnt, mpm_netware, mpmt_os2
|
Сервер установит размер буфера приёма TCP, равный указанному количеству байт.
Если задано значение 0, сервер будет использовать значение по умолчанию для ОС.
Директива ScoreBoardFile
| Описание: | Расположение файла для хранения данных координации дочерних процессов |
|---|---|
| Синтаксис: | ScoreBoardFile file-path |
| Значение по умолчанию: | ScoreBoardFile logs/apache_runtime_status |
| Контекст: | конфигурация сервера |
| Статус: | MPM |
| Модуль: |
event, worker, prefork, mpm_winnt
|
Apache HTTP Server использует scoreboard для обмена данными между родительскими и дочерними процессами. В некоторых архитектурах для этого требуется файл. Если файл не указан, Apache httpd сначала пытается создать scoreboard целиком в памяти (используя анонимную разделяемую память), а если это не удаётся — пытается создать файл на диске (используя разделяемую память на основе файлов). При указании этой директивы Apache httpd всегда создаёт файл на диске.
Пример
ScoreBoardFile /var/run/apache_runtime_status
Разделяемая память на основе файлов полезна для сторонних приложений, которым необходим прямой доступ к scoreboard.
Если вы используете ScoreBoardFile, его размещение на RAM-диске может повысить скорость работы. При этом учитывайте те же предостережения, что и при размещении файлов журналов, а также рекомендации по безопасности.
См. также
Директива SendBufferSize
| Описание: | Размер буфера TCP |
|---|---|
| Синтаксис: | SendBufferSize bytes |
| Значение по умолчанию: | SendBufferSize 0 |
| Контекст: | конфигурация сервера |
| Статус: | MPM |
| Модуль: |
event, worker, prefork, mpm_winnt, mpm_netware, mpmt_os2
|
Задаёт размер буфера отправки TCP сервера в указанном количестве байт. Для высокоскоростных соединений с большой задержкой (например, около 100 мс, как у быстрых трансконтинентальных каналов) часто полезно задать значение выше стандартного значения ОС.
Если задано значение 0, сервер будет использовать значение по умолчанию, предоставляемое ОС.
Для повышения производительности высокоскоростных соединений с большой задержкой может потребоваться дополнительная настройка операционной системы.
В некоторых операционных системах изменения поведения TCP, вызванные увеличением SendBufferSize, могут быть незаметны, если для EnableSendfile не установлено значение OFF. Это взаимодействие влияет только на статические файлы.
Директива ServerLimit
| Описание: | Верхний предел настраиваемого количества процессов |
|---|---|
| Синтаксис: | ServerLimit number |
| Значение по умолчанию: | See usage for details |
| Контекст: | конфигурация сервера |
| Статус: | MPM |
| Модуль: |
event, worker, prefork
|
Для MPM prefork эта директива задаёт максимальное настраиваемое значение MaxRequestWorkers на всё время работы процесса Apache httpd. Для MPM worker и event эта директива вместе с ThreadLimit задаёт максимальное настраиваемое значение MaxRequestWorkers на всё время работы процесса Apache httpd. Для MPM event эта директива также определяет, сколько старых процессов сервера могут продолжать работу и завершать обработку открытых подключений. Попытки изменить эту директиву при перезапуске будут проигнорированы, но MaxRequestWorkers можно изменить во время перезапуска.
При использовании этой директивы требуется особая осторожность. Если для ServerLimit задано значение, значительно превышающее необходимое, будет выделена лишняя неиспользуемая разделяемая память. Если для ServerLimit и MaxRequestWorkers заданы значения, превышающие возможности системы, Apache httpd может не запуститься или работа системы может стать нестабильной.
Для MPM prefork используйте эту директиву, только если необходимо задать для MaxRequestWorkers значение выше 256 (значение по умолчанию). Не задавайте для этой директивы значение выше того, которое вы планируете установить для MaxRequestWorkers.
Для worker используйте эту директиву, только если значения MaxRequestWorkers и ThreadsPerChild требуют более 16 процессов сервера (значение по умолчанию). Не задавайте для этой директивы значение выше количества процессов сервера, необходимого для заданных вами значений MaxRequestWorkers и ThreadsPerChild.
Для event увеличьте значение этой директивы, если количество процессов, заданное параметрами MaxRequestWorkers и ThreadsPerChild, вместе с количеством корректно завершающих работу процессов превышает 16 (значение по умолчанию).
Примечание
В сервере задан жёсткий предел ServerLimit 20000 (для MPM prefork — 200000). Он предназначен для предотвращения серьёзных последствий опечаток. Чтобы превысить этот предел, необходимо изменить значение MAX_SERVER_LIMIT в исходном файле MPM и пересобрать сервер.
См. также
Директива StartServers
| Описание: | Количество дочерних процессов сервера, создаваемых при запуске |
|---|---|
| Синтаксис: | StartServers number |
| Значение по умолчанию: | See usage for details |
| Контекст: | конфигурация сервера |
| Статус: | MPM |
| Модуль: |
event, worker, prefork, mpmt_os2
|
Директива StartServers задаёт количество дочерних процессов сервера, создаваемых при запуске. Поскольку количество процессов динамически регулируется в зависимости от нагрузки (см. MinSpareThreads, MaxSpareThreads, MinSpareServers, MaxSpareServers), обычно нет необходимости изменять этот параметр.
Значение по умолчанию зависит от MPM. Для worker и event по умолчанию используется StartServers 3; для prefork — 5; для mpmt_os2 — 2.
Директива StartThreads
| Описание: | Количество потоков, создаваемых при запуске |
|---|---|
| Синтаксис: | StartThreads number |
| Значение по умолчанию: | See usage for details |
| Контекст: | конфигурация сервера |
| Статус: | MPM |
| Модуль: | mpm_netware |
Количество потоков, создаваемых при запуске. Поскольку количество потоков динамически регулируется в зависимости от нагрузки (см. MinSpareThreads, MaxSpareThreads, MinSpareServers, MaxSpareServers), обычно нет необходимости изменять этот параметр.
Для mpm_netware значение по умолчанию равно StartThreads 50. Поскольку процесс только один, это общее количество потоков, создаваемых при запуске для обслуживания запросов.
Директива ThreadLimit
| Описание: | Задает верхний предел на настраиваемое количество потоков для дочернего процесса |
|---|---|
| Синтаксис: | ThreadLimit number |
| По умолчанию: | See usage for details |
| Контекст: | конфигурация сервера |
| Статус: | MPM |
| Модуль: |
event, worker, mpm_winnt
|
Эта директива задает максимальное значение, которое можно установить для ThreadsPerChild в течение всего времени работы процесса Apache httpd. Любые попытки изменить эту директиву при перезапуске будут проигнорированы, но ThreadsPerChild можно изменить при перезапуске в пределах значения этой директивы.
При использовании этой директивы следует соблюдать особую осторожность. Если ThreadLimit задано значение, значительно превышающее ThreadsPerChild, будет выделена дополнительная неиспользуемая общая память. Если для ThreadLimit и ThreadsPerChild заданы значения, превышающие возможности системы, Apache httpd может не запуститься или система может стать нестабильной. Не задавайте для этой директивы значение выше наибольшего прогнозируемого значения ThreadsPerChild для текущего запуска Apache httpd.
Значение по умолчанию для ThreadLimit составляет 1920 при использовании с mpm_winnt и 64 при использовании с остальными модулями.
Примечание
В сервер встроено жесткое ограничение ThreadLimit 20000 (или ThreadLimit 100000 с event, ThreadLimit 15000 с mpm_winnt). Оно предназначено для предотвращения серьезных последствий опечаток. Чтобы увеличить это значение сверх указанного ограничения, необходимо изменить значение MAX_THREAD_LIMIT в исходном файле mpm и пересобрать сервер.
Директива ThreadsPerChild
| Описание: | Количество потоков, создаваемых каждым дочерним процессом |
|---|---|
| Синтаксис: | ThreadsPerChild number |
| По умолчанию: | See usage for details |
| Контекст: | конфигурация сервера |
| Статус: | MPM |
| Модуль: |
event, worker, mpm_winnt
|
Эта директива задает количество потоков, создаваемых каждым дочерним процессом. Дочерний процесс создает эти потоки при запуске и больше никогда их не создает. При использовании MPM, например mpm_winnt, в котором имеется только один дочерний процесс, это число должно быть достаточно большим, чтобы справляться со всей нагрузкой сервера. При использовании MPM, например worker, в котором имеется несколько дочерних процессов, общее количество потоков должно быть достаточно большим, чтобы справляться с обычной нагрузкой сервера.
Значение по умолчанию для ThreadsPerChild составляет 64 при использовании с mpm_winnt и 25 при использовании с остальными модулями.
Значение ThreadsPerChild не может превышать значение ThreadLimit. Если задано большее значение, оно будет автоматически уменьшено при запуске, и в журнал будет записано предупреждение. Взаимосвязь между этими двумя директивами объясняется в ThreadLimit.
Директива ThreadStackSize
| Описание: | Размер в байтах стека, используемого потоками, обрабатывающими подключения клиентов |
|---|---|
| Синтаксис: | ThreadStackSize size |
| По умолчанию: | 65536 on NetWare; varies on other operating systems |
| Контекст: | конфигурация сервера |
| Статус: | MPM |
| Модуль: |
event, worker, mpm_winnt, mpm_netware, mpmt_os2
|
| Совместимость: | Доступна в Apache HTTP Server 2.1 и более поздних версиях |
Директива ThreadStackSize задает размер стека (для автоданных) потоков, которые обрабатывают подключения клиентов и вызывают модули для обработки этих подключений. В большинстве случаев размер стека, заданный по умолчанию в операционной системе, является подходящим, однако в некоторых ситуациях его может потребоваться изменить:
- На платформах с относительно небольшим размером стека потоков по умолчанию (например, HP-UX) Apache httpd может аварийно завершить работу при использовании некоторых сторонних модулей, которые используют сравнительно большой объем хранилища автоданных. Те же модули могут нормально работать на других платформах, где размер стека потоков по умолчанию больше. Такую аварию можно устранить, задав для
ThreadStackSizeзначение выше установленного по умолчанию в операционной системе. Такая настройка требуется только в том случае, если поставщик стороннего модуля указывает на ее необходимость или диагностика аварийного завершения Apache httpd показывает, что размер стека потоков был слишком мал. - На платформах, где размер стека потоков по умолчанию значительно превышает необходимый для конфигурации веб-сервера, можно увеличить количество потоков на дочерний процесс, задав для
ThreadStackSizeзначение ниже установленного по умолчанию в операционной системе. Такую настройку следует выполнять только в тестовой среде, позволяющей проверить весь набор операций веб-сервера, поскольку могут возникать редкие запросы, для обработки которых требуется больше стека. Минимальный необходимый размер стека сильно зависит от используемых модулей, однако любое изменение конфигурации веб-сервера может сделать текущую настройкуThreadStackSizeнедействительной. - В Linux эту директиву можно использовать только для увеличения размера стека по умолчанию, поскольку лежащий в основе системный вызов использует это значение как минимальный размер стека. В качестве размера стека по умолчанию используется (часто большой) мягкий лимит для
ulimit -s(8 МБ, если лимит не установлен).
ThreadStackSize, если только не требуется большое количество потоков на дочерний процесс. На некоторых платформах (включая Linux) значение 128000 уже слишком мало и приводит к аварийному завершению работы с некоторыми распространенными модулями.
© 2018 The Apache Software Foundation
Licensed under the Apache License, Version 2.0.
https://httpd.apache.org/docs/2.4/en/mod/mpm_common.html