Рекомендации по настройке 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>
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
18
0
18 312
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

MaxClients

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

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

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

MinSpareServers

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

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

MaxSpareServers

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

MaxRequestsPerChild

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

StartServers

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

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

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

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

Jeremy 20.09.2008 01:56

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

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

У нас уже превышены настройки по умолчанию. Несколько месяцев назад я заметил, что мы использовали всех доступных воркеров на Apache, и изменил настройки на указанные выше, что очень помогло. Я выбрал их несколько произвольно. В среднем мы делаем 100 000–350 000 обращений в день.

Jeremy 20.09.2008 18:36
Ответ принят как подходящий

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

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

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

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

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

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

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