Apache max clients windows

Настройка Apache MaxClient для 256 ГБ оперативной памяти с модулем mpm_prefork

Я хочу увеличить MaxClient для сервера Apache с помощью модуля mpm_prefork. Я использую только веб-сервер на выделенном сервере с 256 ГБ ОЗУ. Я не запускаю никакую другую программу на сервере.

Я использую HTTP API веб-сервиса на сервере, который разработан с использованием PHP, который будет вызываться 1000 раз в секунду.

Я использую CentOS 7

Спецификация сервера
Intel® Xeon® E5-1650 v3 Hexa-Core Haswell,
ОЗУ 256 ГБ ОЗУ DDR4 ECC,
Жесткий диск 2 x 480 ГБ SSD (Software-RAID 1),
Соединение 1 Гбит / с

1) Какое максимальное значение я могу использовать для MaxClient? Могу ли я использовать 1000?

2) Я использую версию сервера: Apache / 2.4.6 (CentOS). Я не смог найти файл для изменения MaxClient. Где я могу это изменить? Файл /etc/httpd/conf/httpd.conf не имеет настройки MaxClient. Также файл /etc/httpd/conf.modules.d/00-mpm.conf также не имеет настройки MaxClient

Я новичок на сервере Apache. Пожалуйста, помогите мне сделать это. Я пробовал 2 дня, но не нашел решения

Решение

Он не включен в конфигурацию по умолчанию, которая поставляется с CentOS 7. Добавьте такой блок в верхней части вашего httpd.conf перед LoadModule директивы (это то, что я использую для сервера с более низкой спецификацией):

MaxClients был переименован MaxRequestWorkers в Apache 2.4. я держу ServerLimit немного выше, так как ServerLimit не может быть изменен при перезагрузке, но MaxRequestWorkers Можно. ServerLimit устанавливает максимальное значение для MaxRequestWorkers , Итак, выкладываю ServerLimit немного выше дает вам возможность для увеличения MaxRequestWorkers в чрезвычайной ситуации без отключения клиентов.

Выше, что я использую на моем сервере. Я уверен, что со спецификацией у вас есть значение 1000 для MaxRequestWorkers будет хорошо. Возможно поставить ServerLimit в 1200

Вы также захотите увеличить другие значения. Возможно 40 для StartServers 25 для MinSpareServers и 100 для MaxSpareServers ,

Я люблю держать MaxConnectionsPerChild на 1000, так что если есть какие-либо утечки памяти, они не вызовут больших проблем. Я предлагаю вам сохранить ту же ценность.

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

Собирая все это вместе, я предлагаю вам использовать:

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

Еще одна важная проблема

Я настоятельно рекомендую вам отключить LoadModule директивы для любых модулей, которые вы не используете (просто закомментируйте их). Это значительно снизит объем памяти каждого серверного процесса и позволит вам запускать больше из них. В конфигурации по умолчанию загружено много модулей, которые вам не понадобятся. Просмотрите их по одному и Google для того, что они делают. Это повысит эффективность использования вашего ресурса.

Настройка Apache

Установим минимально необходимые для работы атрибуты, для этого откроем для редактирования файл /etc/httpd/conf/httpd.conf

Apache может работать с одним из трех доступных мультипроцессорных модулей (mpm):

  1. prefork — один процесс на запрос, наиболее часто используемый модуль;
  2. worker — несколько процессов с несколькими нитями у каждого;
  3. event — новый экспериментальный вариант стандартного worker мультипроцессорного модуля.
Читайте также:  Windows 10 x64 20h2 облегченная 2021 micro

Для просмотра информации о модулях выполните:

Пример конфигурации для Apache 2.4

ServerLimit 256
StartServers 20
MinSpareServers 20
MaxSpareServers 20
MaxRequestWorkers 256
MaxConnectionsPerChild 4000

MaxRequestWorkers установите значением, равным ServerLimit.

Пример конфигурации для Apache 2

В секции , например, установим следующие значения:

StartServers 5
MinSpareServers 10
MaxSpareServers 10
MaxClients 30
ServerLimit 30

StartServers — количество запускаемых процессов, рассчитываете как (Всего памяти — Память для сервера, MySQL, Memcache и т.д.) / размер процесса. Например, 64Gb — 32Gb / 0.256Gb = максимум 125 процессов.

MinSpareServers — минимальное количество простаивающих процессов.

MaxSpareServers — максимальное количество простаивающих процессов.

MaxClients — лимит процессов.

ServerLimit — устанавливается аналогичным значению MaxClients.

Обстоятельно необходимо подходить к расчету MaxClients, т.к. при установке малого значения может увеличиться количество отказов вэб-сервера в обслуживании на запрос клиента. Установка слишком большого значения может привести к свопингу и значительному увеличению времени ответа вэб-сервера.

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

KeepAlive

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

  1. Включаем KeepAlive, для этого строку KeepAlive Off заменяем на KeepAlive On.
  2. MaxKeepAliveRequests установим в значение 100.
  3. KeepAliveTimeout наиболее часто устанавливается в диапазоне 2 — 10. Рекомендуем установить 5 секунд.

Настройка apache MPM (prefork, worker, event)

Apache (он же httpd) — один из самых популярных веб-серверов, который может работать на множестве платформ. Различные окружения и платформы могут реализовывать один и тот же функционал по разному, поэтому не существует идеального рецепта конфигурации, в каждом случае требуется индивидуальный подход. Правильная настройка сервиса сделает пользователей счастливыми, а админа спокойным.

Про отключение неиспользуемых модулей слышали пожалуй все, а сегодня мы поговорим про MPM (Multi-Processing Modules) — prefork, worker и event.

Intro

Apache имеет модульную архитектуру, что позволяет выбрать необходимую функциональность, которая будет реализована при помощи подключаемых модулей. В Apache 2.0 модульная архитектура была расширена наиболее общими функциями веб-сервера. Теперь сервер поставляется с набором мульти-процессных модулей (MPM), ответственных за сетевое соединение, за прием запросов и за координацию их обработки дочерними процессами.

Для Unix систем для определения какой-же модуль можно использовать можно воспользоваться таблицей:

В системе есть поддержка event worker prefork
threads + +
thread-safe polling (kqueue и epoll) +

Фактически это означает, что для Unix почти всегда будет доступен event, так как все современные операционные системы поддерживают эти две функции. *PHP по умолчанию не поддерживает thread safe, поэтому если вам нужен mod_php — используйте prefork.

Для проверки какой модуль используется в данным момент можно использовать команды:

По умолчанию в Apache 2.4 подключен модуль prefork.

Prefork

При использовании модуля prefork каждый запрос обслуживается отдельным процессом Apache. Основное преимущество prefork — стабильность, процессы изолированы друг от друга и ошибки при обработке одного запроса ни как не затронут другие запросы. Родительский процесс отвечает за запуск дочерних процессов, которые обслуживают соединения. Apache старается всегда держать в резерве несколько процессов (обычно их называют spare или idle процессы) для того чтобы клиенты не ждали пока запустится дочерний процесс для обслуживания их запроса.

Одна из важнейших директив для настройки этого MPM — MaxRequestWorkers (или MaxClients для версий ниже 2.3.13). Фактически она определяет максимальное количество одновременно обслуживаемых клиентов и соответственно от этой директивы зависит максимальное потребление RAM.

Пример конфигурационного файла (Apache/2.2.15 Centos 6)

StartServers: число процессов, которые запустятся при старте Apache.
MinSpareServers: минимальное количество процессов, которые держатся в резерве.
MaxSpareServers: максимальное количество процессов, которые держатся в резерве.
ServerLimit: максимальное количество процессов Apache (в целом).
MaxClients: максимальное число одновременных клиентских соединений (в разрезе prefork = максимальному количеству дочерних процессов).
MaxRequestsPerChild: максимальное количество запросов, после которых дочерний процесс будет перезапущен (позволяет нивелировать эффект от memory leak).

Для базовой настройки необходимо поменять только MaxClients (MaxRequestWorkers) и ServerLimit, остальные параметры на первом этапе можно оставить по умолчанию.

Расчет MaxClients (MaxRequestWorkers)

Допустим нам необходимо выделить 512Mb для Apache. Для этого выясняем сколько RAM потребляет один процесс Apache (только по одному этому пункту можно написать отдельную книгу, но для начала нам хватит метода описанного далее): запускаем ps и выясняем pid дочернего процесса (родительский будет запущен от пользователя root), далее запускаем pmap и смотрим параметр writeable/private, в примере это 1776K (1.7Mb).

Дальше все просто: 512/1.7 = 301 — вот значение для ServerLimit и MaxClients (MaxRequestWorkers). В реальности будут другие цифры, в примере использовался свежеустановленный Apache без нагрузки и без mod_php, и лучше брать среднее значение от потребления RAM всеми дочерними процессами, а не значение одного случайного процесса и проводить замеры во время наибольшей нагрузки или во время нагрузочного тестирования. Если вы еще не знаете какая будет нагрузка и сколько будет потреблять RAM один процесс, то ориентируйтесь на цифру в 25Mb — 35Mb (если планируете использовать mod_php), для начала этого хватит, позже вернетесь к этому параметру.

Для того чтобы узнать количество запущенных процессов Apache в текущий момент можно воспользоваться командой:

Worker

Worker сочетает в себе мульти-процессовый (multi-process) и мульти-поточный (multi-threaded) сервер. Использование потоков (threads) позволяет обслуживать больше запросов при меньших аппаратных ресурсах чем просто мульти-процессовый сервер (prefork). Тем не менее, он сохраняет большую часть стабильности мульти-процессового сервера, используя несколько процессов, каждый из которых имеет множество потоков.

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

Пример конфигурационного файла (Apache/2.2.15 Centos 6)

StartServers: число процессов, которые запустятся при старте Apache.
MaxClients: максимальное число одновременных клиентских соединений (в разрезе worker = максимальному количеству потоков).
MinSpareThreads: минимальное количество потоков, которые держатся в резерве.
MaxSpareThreads: максимальное количество потоков, которые держатся в резерве.
ThreadsPerChild: количество потоков на один процесс.
MaxRequestsPerChild: максимальное количество запросов, после которых дочерний процесс будет перезапущен (позволяет нивелировать эффект от memory leak).
ThreadLimit: максимальное число потоков для одного процесса (не может быть изменена без перезапуска сервера apache, в отличии от ThreadsPerChild)

Может возникнуть ситуация, при которой процесс достигший MaxRequestsPerChild будет ожидать завершения и перестанет принимать новые соединения, но у него будет один поток, который все еще обрабатывает клиентское соединение. Так мы можем достигнуть порог MaxClients (MaxRequestWorkers), хотя фактически клиентских запросов обрабатывается гораздо меньше. Чтобы избежать такого поведения сервера можно установить MaxRequestsPerChild в 0 и MaxSpareThreads = MaxClients (MaxRequestWorkers).

Расчет ServerLimit и MaxClients (MaxRequestWorkers)

Схема остается прежней, смотрим потребление RAM одним процессом, рассчитываем ServerLimit. MaxClients (MaxRequestWorkers) рассчитываем как ServerLimit * ThreadsPerChild.

Event

Event позволяет обслуживать большое количество одновременных соединений путем передачи части работы по обработке запроса отдельным потокам (listeners threads).

Этот MPM призван исправить проблему «keep alive» в HTTP. После того, как клиент выполнит первый запрос, он может оставить соединение открытым, отправляя будущие запросы используя тот же самый сокет избегая накладных расходов при установлении нового TCP-соединения. В случае prefork и worker Apache сохраняет дочерний процесс / поток, ожидающий данных от клиента, что приводит к неэффективному расходу ресурсов. Чтобы решить эту проблему, event использует выделенный поток (listener thread) для каждого процесса для обработки сокетов в состоянии Listening, Keep Alive и сокетов, для которых осталось только передать данные клиенту. Таким образом рабочий поток получает уже готовый запрос и освобождается сразу после его обработки.

Директивы остаются такими же как и у MPM worker, принцип расчета RAM остается тот же.

Защита от F5. Настраиваем Apache правильно.

Нажав клавишу F5 в окне браузера и удерживая ее в течении нескольких минут вы можете устроить легкую DDOS атаку на сайт. Функциональная клавиша F5 дает команду браузеру перезагрузить страницу.

Если вы ее нажали и удерживаете длительное время, то ваш компьютер пытается загрузить ее (страницу) много и много раз, чем создает нагрузку на сервер в виде множественных запросов. А так как возможности любого сервера не безграничны, то от переизбытка «чувств» запросов он может перестать работать.

Зависнет сервер или нет зависит от технических характеристик и настроек самого сервера, сайта и используемой CMS. В этой статье я опишу как правильно настроить вэб-сервер Apache2 чтобы даже самый скромный сервер VDS с 512 МБ памяти справлялся с большим количеством запросов, в том числе вызванных клавишей F5.

Подготовка к настройке сервера

Определим какой модуль MPM использует Apache2. Для CentOS это выглядит так:

Отлично, у нас Server MPM: Prefork

Настройка Apache, что бы не было проблем с жором памяти

В CentOS надо отредактировать файл /etc/httpd/conf/httpd.conf.

Который по-умолчанию может иметь следующее содержание:

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

  • StartServers — число дочерних процессов, создаваемых при запуске сервера.
  • MinSpareServers — минимальное число неиспользуемых (запасных) дочерних процессов сервера, ожидающих потенциальные запросы.
  • MaxSpareServers — максимальное число запасных процессов, ожидающих потенциальные запросы. Если это число будет превышено, лишние процессы будут убиты.
  • MaxClients — самый важный параметр модуля MPM prefork, устанавливает верхний предел количества одновременно активных процессов. Именно от него зависит потребление памяти. Его значение перекрывает значение предыдущих параметров.
  • ServerLimit обычно равен MaxClients.
  • MaxRequestsPerChild — как часто сервер перерабатывает процессы, убивая старые и начиная (запуская) новые. Полезен при утечках памяти Apache и его библиотек.
  • KeepAlive — обеспечивает долгоживущие сессии HTTP, позволяющие отправлять несколько запросов через одно и то же соединение. Полезно включить, если страницы содержат много изображений. Но если используете NGINX как проксисервер, то оставьте значение OFF.

Самый важный параметр = MaxClients, он как раз и говорит о количестве одновременных процессов вебсервера Apache.

Как узнать значение MaxClients

Определить его значение не сложно. Расчет значения приведу для сервера с размером оперативной памяти 512 МБ. Решаем, что отдаем для ресурсов Apache 50% оперативной памяти, то есть в нашем случае 256 МБ.

Определяем сколько памяти отжирает один процесс:

Получаем следующие значения:

Получается, что в среднем один процесс Apache потребляет 21 МБ. Соответственно в отведенном объеме 256 МБ мы можем запустить 12 процессов.

Исправим файл конфигурации под новое значение:

Остальные параметры поправил исходя из рекомендаций в интернете для сервера с ОЗУ 512 МБ.

После внесения изменений в файл конфигурации не забудьте перезагрузить Appache:

Благодарности

При написании статьи были использованы следующие источники:

Читайте также:  Find exclude dir linux
Оцените статью