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

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

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

соответствующий сервер.xml-фрагменты:

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

соответствующий файл httpd.конф порции:

<IfModule prefork.c>
  StartServers       8
  MinSpareServers    5
  MaxSpareServers   20
  ServerLimit      256
  MaxClients       256
  MaxRequestsPerChild  0
</IfModule>

3 ответов


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

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

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

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

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

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


MaxClients

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

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

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

MinSpareServers

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

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

MaxSpareServers

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

MaxRequestsPerChild

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

StartServers

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

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

см. также в документация по мультипроцессорным модулям apache.


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

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