Вопрос

В настоящее время мы используем Apache 2.2.3 и Tomcat 5 (встроенный в JBoss 4.2.2), используя mod_proxy_jk в качестве соединителя.

Может ли кто-нибудь пролить некоторый свет на правильный способ вычисления / настройки приведенных ниже значений (а также на все остальное, что может иметь отношение к делу).И Apache, и Tomcat работают на разных машинах и имеют большое количество оперативной памяти (по 4 Гб каждая).

Соответствующие server.xml части:

<Connector port="8009"
           address="${jboss.bind.address}"
           protocol="AJP/1.3"
           emptySessionPath="true"
           enableLookups="false"
           redirectPort="8443"
           maxThreads="320"
           connectionTimeout="45000"
    />

Соответствующие части httpd.conf:

<IfModule prefork.c>
  StartServers       8
  MinSpareServers    5
  MaxSpareServers   20
  ServerLimit      256
  MaxClients       256
  MaxRequestsPerChild  0
</IfModule>
Это было полезно?

Решение

Вам следует учитывать нагрузку, которую могут получить серверы.

Наиболее важным фактором может быть количество одновременно подключенных клиентов в часы пик.Попробуйте определить это и настроить свои настройки таким образом, чтобы:

  • как в Apache, так и в Tomcat достаточно потоков обработки, поэтому им не нужно создавать новые потоки, когда сервер сильно загружен
  • на серверах не намного больше потоков обработки, чем необходимо, поскольку они будут тратить ресурсы впустую.

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

Например, рассмотрим приложение, в котором у вас появляется ~ 300 новых запросов в секунду.На обслуживание каждого запроса требуется в среднем 2,5 секунды.Это означает, что в любой момент времени у вас есть ~ 750 запросов, которые необходимо обрабатывать одновременно.В этой ситуации вы, вероятно, захотите настроить свои серверы так, чтобы при запуске они имели ~ 750 потоков обработки, и вы могли бы добавить что-то вроде ~ 1000 потоков обработки максимум для обработки чрезвычайно высоких нагрузок.

Также подумайте, для чего именно вам нужен поток.В предыдущем примере каждый запрос был независим от других, отслеживание сеанса не использовалось.В более "веб-иш" сценарии у вас могут быть пользователи, зарегистрировавшиеся на вашем веб-сайте, и в зависимости от используемого вами программного обеспечения Apache и / или Tomcat может потребоваться использовать один и тот же поток для обслуживания запросов, поступающих за один сеанс.В этом случае вам может понадобиться больше потоков.Однако, насколько я знаю Tomcat, по крайней мере, вам действительно не нужно будет учитывать это, поскольку он в любом случае работает с пулами потоков внутренне.

Другие советы

Максимальные клиенты

Это основное ограничение параллельных клиентских подключений, которое ваш apache должен обрабатывать сразу.

С помощью prefork для каждого процесса может быть обработан только один запрос.Таким образом, весь apache может обрабатывать самое большее Запросы $MaxClients за время, необходимое для обработки одинокий просьба.Конечно, этот идеальный максимум может быть достигнут только в том случае, если приложению требуется меньше ресурсов 1 / $MaxClients на запрос.

Если, например, приложению требуется секунда процессорного времени для ответа на один запрос, установка значения MaxClients равным четырем ограничит вашу пропускную способность четырьмя запросами в секунду:Каждый запрос использует соединение apache, и apache будет обрабатывать только четыре одновременно.Но если на сервере всего два процессора, то даже этого достичь невозможно, потому что каждая секунда настенных часов имеет только две секунды процессора, но для выполнения запросов потребуется четыре секунды процессора.

Мини - серверы

Это сообщает apache, сколько незанятых процессов должно зависать.Чем больше это число, тем больше пакетной загрузки apache может проглотить, прежде чем потребуется запускать дополнительные процессы, что является дорогостоящим и, следовательно, замедляет выполнение текущего запроса.

Правильная настройка этого параметра зависит от вашей рабочей нагрузки.Если у вас есть страницы с большим количеством вложенных запросов (pictures, iframes, javascript, css), то при нажатии на одну страницу может потребоваться гораздо больше процессов за короткое время.

Максимальные серверы

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

MaxRequestsPerChild - Максимальный запрос

Это ограничивает количество запросов, которые один процесс будет обрабатывать на протяжении всего своего срока службы.Если вы очень обеспокоены стабильностью, вам следует установить здесь фактическое ограничение на постоянную переработку процессов apache, чтобы предотвратить влияние утечек ресурсов на систему.

Стартовые серверы

Это всего лишь количество процессов, которые apache запускает по умолчанию.Установите это значение на обычное количество запущенных процессов apache, чтобы сократить время прогрева вашей системы.Даже если вы проигнорируете этот параметр, apache будет использовать значения Min-/MaxSpareServers для запуска новых процессов по мере необходимости.

Дополнительная информация

Смотрите также документация для многопроцессорных модулей apache.

Настройки по умолчанию, как правило, являются хорошей отправной точкой для того, чтобы понять, что действительно понадобится вашим приложениям.Я не знаю, какой объем трафика вы ожидаете, поэтому угадать с maxThreads, MaxClients и MaxServers немного сложно.Я могу сказать вам, что большинство клиентов, с которыми я имею дело (работаю на веб-хостинге Linux, который имеет дело в основном с клиентами, запускающими Java-приложения в Tomcat), используют настройки по умолчанию довольно долгое время, не требуя слишком большого количества настроек.

Если вы не ожидаете большого трафика, то "слишком высокие" настройки на самом деле также не должны сильно влиять на вас.Apache не собирается выделять ресурсы для всех 256 потенциальных клиентов, если только в этом не возникнет необходимости.То же самое относится и к Tomcat.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top