Подтвердить что ты не робот

Рекомендации по настройке Apache/Tomcat

В настоящее время мы используем 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>
4b9b3361

Ответ 1

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

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

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

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

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

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

Ответ 2

MaxClients

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

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

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

MinSpareServers

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

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

MaxSpareServers

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

MaxRequestsPerChild

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

StartServers

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

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

См. также документация для модулей обработки нескольких апачей.

Ответ 3

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

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