Назад | Перейти на главную страницу

Как настроить производительность сервера Apache?

У нас есть сервер apache 2.4.X, который мы используем в качестве обратного прокси перед одним Java-приложением. Мы включили модуль статуса Apache Статус Apache и мы можем видеть, что количество незанятых рабочих потоков всегда будет равно нулю, следовательно, производительность нашего приложения низкая. На нашем хостинг-сервере есть 32 ядра и 64 ГБ оперативной памяти . Мы используем модуль mpm_worker Apache. Apache mpm_worker Наша текущая конфигурация mpm_worker:

 <IfModule mpm_worker_module>
    ServerLimit            150
    StartServers             8
    MinSpareThreads         25
    MaxSpareThreads         75
    ThreadsPerChild         25
    MaxRequestWorkers      150
    MaxConnectionsPerChild   10000
</IfModule>

.Мы прошли Статья о настройке производительности Apache и обнаружил, что мы можем иметь 2930 рабочих запросов согласно конфигурации нашего сервера. Мои вопросы.

  1. Изменение MaxRequestWorkers в одиночку до 2930 работать будет?

  2. Нам нужно изменить ThreadsPerChild также ?

  3. StartServers который представляет дочерние процессы Apache, также необходимо изменить / Или мы можем изменить это также для оптимальной производительности в зависимости от конфигурации нашего сервера.

  4. Что должно быть ServerLimit значение для обновленного MaxRequestWorkers чехол какой будет 2930?

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

  • ServerLimit
    Максимальное количество процессов, которые сервер создаст
  • StartServers
    Количество процессов, которые сервер создаст при запуске
  • ThreadsPerChild
    Количество потоков, создаваемых каждым процессом.
  • MinSpareThreads
    Минимальное количество потоков, которые должны существовать. (В основном при запуске)
  • MaxSpareThreads
    Максимальное количество потоков, которые сервер будет продолжать работать.
  • MaxRequestWorkers
    Максимальное количество подключений, которые Сервер будет принимать одновременно.
  • MaxConnectionsPerChild
    Максимальное количество подключений, которое будет принимать каждый процесс. Это определяет время жизни дочернего процесса.

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

Вам также следует посмотреть на MaxClients Настройка того, что он будет принимать все входящие запросы.

Если рабочие потоки недоступны, увеличьте количество MaxSpareThreads

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

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

С другой стороны Время выполнения приложения держит ваши потоки занятыми. Быть Быстрее с вашим Ява Приложение освободит потоки и память.

В качестве примера: получение 50 запросов в секунду и каждый запрос занимает 4 секунды завершить. вам понадобится 200 потоков чтобы покрыть этот спрос.
Если каждый запрос принимал только 2 секунды вы могли бы покрыть это только 100 потоков.