У нас есть сервер 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 рабочих запросов согласно конфигурации нашего сервера. Мои вопросы.
Изменение MaxRequestWorkers в одиночку до 2930 работать будет?
Нам нужно изменить ThreadsPerChild также ?
StartServers который представляет дочерние процессы Apache, также необходимо изменить / Или мы можем изменить это также для оптимальной производительности в зависимости от конфигурации нашего сервера.
Что должно быть ServerLimit значение для обновленного MaxRequestWorkers чехол какой будет 2930?
Чтобы иметь возможность создать подходящий профиль для вашего Сервера, вам необходимо понимать, что означает каждая Конфигурация данной Директивы:
Сказав это. Сколько обычно выполняется дочерних процессов?
Вы уже достигли ServerLimit
дочерних процессов?
Вам также следует посмотреть на MaxClients
Настройка того, что он будет принимать все входящие запросы.
Если рабочие потоки недоступны, увеличьте количество MaxSpareThreads
Запуск новых дочерних процессов потребляет Циклы ЦП поэтому на загруженном сайте MaxSpareThreads
предел должен быть большим.
Но избавление от старых процессов также освободит ваше Системная память, поэтому вам следует ограничить Время жизни процессов с MaxConnectionsPerChild
.
С другой стороны Время выполнения приложения держит ваши потоки занятыми. Быть Быстрее с вашим Ява Приложение освободит потоки и память.
В качестве примера: получение 50 запросов в секунду и каждый запрос занимает 4 секунды завершить. вам понадобится 200 потоков чтобы покрыть этот спрос.
Если каждый запрос принимал только 2 секунды вы могли бы покрыть это только 100 потоков.