Лучшие практики для настройки Apache / Tomcat - PullRequest
17 голосов
/ 20 сентября 2008

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

Ответы [ 3 ]

6 голосов
/ 21 сентября 2008

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

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

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

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

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

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

5 голосов
/ 20 сентября 2008

MaxClients

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

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

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

MinSpareServers

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

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

MaxSpareServers

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

MaxRequestsPerChild

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

StartServers

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

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

См. Также документацию по модулям мультиобработки apache .

1 голос
/ 20 сентября 2008

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

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

...