Директивы Apache MPM Common
| Описание: | Совокупность директив, реализованных более чем одной многопроцессной модульной системой (MPM) |
|---|---|
| Статус: | MPM |
Директива CoreDumpDirectory
| Описание: | Директория, в которую сервер Apache HTTP пытается переключиться перед выводом core |
|---|---|
| Синтаксис: | CoreDumpDirectory directory |
| Значение по умолчанию: | See usage for the default setting |
| Контекст: | настройка сервера |
| Статус: | MPM |
| Модуль: |
event, worker, prefork
|
Данная директива задаёт директорию, в которую Apache httpd пытается переключиться перед выводом core. Если ваша операционная система настроена на создание core-файлов в рабочей директории аварийного процесса, необходимо изменить рабочую директорию из стандартной директории ServerRoot, к которой пользователь, под которым работает сервер, не должен иметь права записи.
Если требуется core-файл для отладки, вы можете использовать эту директиву, чтобы разместить его в другом месте. Эта директива не действует, если ваша операционная система не настроена на запись core-файлов в рабочую директорию аварийных процессов.
Примечание по безопасности для систем Linux
Использование этой директивы в Linux может позволить другим процессам на системе (если они работают с аналогичными привилегиями, такими как CGI-скрипты) подключиться к дочерним процессам httpd через системный вызов ptrace. Это может ослабить защиту от определенных атак. Не рекомендуется использовать эту директиву в производственных системах.
Core-файлы в Linux
Если Apache httpd запускается от имени root и переключается на другого пользователя, ядро Linux *отключает* вывод core-файлов, даже если директория доступна для записи процессу. Apache httpd (2.0.46 и более поздние версии) снова включает вывод core-файлов в Linux 2.4 и более поздних версиях, но только если вы явно настроили CoreDumpDirectory.
Core-файлы в BSD
Чтобы включить вывод core-файлов для исполняемых файлов с привилегированными правами на BSD-системах (таких как FreeBSD), установите значение kern.sugid_coredump в 1.
Специфические сигналы
Обработка CoreDumpDirectory происходит только для выбранного набора критических сигналов: SIGFPE, SIGILL, SIGABORT, SIGSEGV и SIGBUS.
В некоторых операционных системах SIGQUIT также приводит к выводу core, но не проходит обработку CoreDumpDirectory или EnableExceptionHook, поэтому расположение core-файла определяется исключительно операционной системой.
Директива EnableExceptionHook
| Описание: | Включает обработчик исключений, который запускается после сбоя |
|---|---|
| Синтаксис: | EnableExceptionHook On|Off |
| Значение по умолчанию: | EnableExceptionHook Off |
| Контекст: | настройка сервера |
| Статус: | MPM |
| Модуль: |
event, worker, prefork
|
По соображениям безопасности эта директива доступна только если сервер настроен с опцией --enable-exception-hook. Она включает обработчик, который позволяет внешним модулям подключаться и выполнять действия после сбоя дочернего процесса.
Уже существуют два модуля, mod_whatkilledus и mod_backtrace, которые используют этот обработчик. Для получения дополнительной информации об этих модулях, пожалуйста, посетите сайт EnableExceptionHook Джеффа Травика EnableExceptionHook.
Директива GracefulShutdownTimeout
| Описание: | Указывает таймаут, после которого сервер, завершающий работу в плавном режиме, завершит работу. |
|---|---|
| Синтаксис: | GracefulShutdownTimeout seconds |
| Значение по умолчанию: | GracefulShutdownTimeout 0 |
| Контекст: | настройка сервера |
| Статус: | MPM |
| Модуль: |
event, worker, prefork
|
| Совместимость: | Доступна в версии 2.2 и более поздних |
Директива GracefulShutdownTimeout задаёт количество секунд, в течение которых сервер должен продолжать работу после получения сигнала «плавного завершения», обрабатывая существующие подключения.
Установка значения 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-адреса или порты; по умолчанию он отвечает на запросы на всех сетевых интерфейсах. 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 не требуется для большинства конфигураций. Если не указан, значение https по умолчанию для порта 443 и 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 в *BSDs). |
Можно использовать соотношение между количеством (включённых) процессорных ядер и количеством бакетов слушателей, чтобы Apache HTTP Server создавал num_cpu_cores / ratio бакетов прослушивания, каждый из которых содержит свои собственные Listen сокет(ы) на одних и тех же портах, а затем заставлять каждый дочерний процесс обрабатывать один бакет (с круговым распределением бакетов во время создания дочерних процессов).
Значение «включённого» процессорного ядра
В Linux (и также в BSD) процессорное ядро может быть включено/выключено, если настроен Hotplug, поэтому ListenCoresBucketsRatio необходимо учитывать этот параметр при расчёте количества создаваемых бакетов.
ListenCoresBucketsRatio может повысить масштабируемость, когда прием новых подключений является узким местом. На системах с большим количеством процессорных ядер использование этой функции показало значительное повышение производительности и сокращение времени отклика.
Для активации этой функции должно быть как минимум в два раза больше процессорных ядер, чем заданное значение соотношения. Рекомендуемое значение соотношения — 8, следовательно, при использовании этого значения должно быть доступно как минимум 16 ядер во время выполнения. Необходимое значение соотношения для достижения максимальной производительности необходимо рассчитывать для каждой целевой системы, тестируя несколько значений и наблюдая за изменениями основных показателей производительности.
Эта директива влияет на расчёт нижних границ значений 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 каждый поток имеет свой собственный аллокатор. При установке в ноль порог будет установлен без ограничений.
Директива 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.
MaxRequestWorkers называлась MaxClients до версии 2.3.13. Старое имя также поддерживается.
Директива 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 и обрабатывают потоки в режиме ожидания на уровне всего сервера. Если на сервере недостаточно потоков в режиме ожидания, дочерние процессы создаются до тех пор, пока количество потоков в режиме ожидания не превысит значение. Дополнительные процессы/потоки могут быть созданы, если 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, и повторно прочитал свои конфигурационные файлы. Это делается путем отправки сигнала SIGHUP (kill -1) процессу, идентификатор которого указан в PidFile.
Для PidFile действуют те же предупреждения о размещении файла журнала и безопасности.
Примечание
Начиная с Apache HTTP Server 2, рекомендуется использовать только скрипт apachectl или скрипт инициализации, предоставляемый вашей ОС, для (пере)запуска или остановки сервера.
Директива 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 использует табло для связи между родительским и дочерними процессами. Некоторые архитектуры требуют файла для облегчения этой связи. Если файл не указан, Apache httpd сначала пытается создать табло полностью в памяти (используя анонимную общую память) и, если это не удается, попытается создать файл на диске (используя общую память на основе файла). Указание этой директивы заставляет Apache httpd всегда создавать файл на диске.
Пример
ScoreBoardFile /var/run/apache_runtime_status
Общая память на основе файла полезна для сторонних приложений, которые требуют прямого доступа к табло.
Если вы используете 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
|
Для prefork MPM эта директива устанавливает максимальное настроенное значение для MaxRequestWorkers на протяжении всего жизненного цикла процесса Apache httpd. Для worker и event MPM эта директива в сочетании с ThreadLimit устанавливает максимальное настроенное значение для MaxRequestWorkers на протяжении всего жизненного цикла процесса Apache httpd. Для event MPM эта директива также определяет, сколько старых серверных процессов могут продолжать работу и завершать обработку открытых подключений. Любые попытки изменить эту директиву во время перезапуска будут проигнорированы, но MaxRequestWorkers можно изменить во время перезапуска.
Необходимо проявлять особую осторожность при использовании этой директивы. Если ServerLimit установлено на значение, намного большее, чем необходимо, будет выделена дополнительная, неиспользуемая общая память. Если и ServerLimit и MaxRequestWorkers установлены на значения, превышающие возможности системы, Apache httpd может не запуститься или система может стать нестабильной.
С prefork MPM используйте эту директиву только если вам нужно установить MaxRequestWorkers выше 256 (по умолчанию). Не устанавливайте значение этой директивы выше того, что вы, возможно, захотите установить для MaxRequestWorkers.
С worker, используйте эту директиву только если ваши настройки MaxRequestWorkers и ThreadsPerChild требуют более 16 серверных процессов (по умолчанию). Не устанавливайте значение этой директивы выше количества серверных процессов, необходимых для ваших настроек MaxRequestWorkers и ThreadsPerChild.
С event, увеличьте эту директиву, если количество процессов, определенное вашими настройками MaxRequestWorkers и ThreadsPerChild плюс количество процессов, которые закрываются нормально, превышает 16 серверных процессов (по умолчанию).
Примечание
Существует жесткий лимит ServerLimit 20000 скомпилированный в сервере (для prefork MPM 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