Apache + Tomcat с настройкой mod_jk: maxThread при балансировке нагрузки

У меня есть установка Apache + Tomcat с mod_jk на 2 серверах. У каждого сервера есть своя пара Apache + Tomcat, и каждый запрос обслуживается работниками балансировки нагрузки Tomcat на 2 серверах.

У меня вопрос о том, как должны быть установлены maxClient Apache и maxThread Tomcat.

Номера по умолчанию: Apache: maxClient=150, Tomcat: maxThread=200

В этой конфигурации, если у нас есть только 1 сервер, он будет работать нормально, так как Tomcat worker никогда не получает входящие соединения более 150 одновременно. Однако, если мы балансируем нагрузку между двумя серверами, возможно ли, что рабочий Tomcat получит 150+ (некоторое число с другого сервера) и сделает переполнение maxThread как SEVERE: All threads (200) are currently busy?

Если да, следует ли мне установить Tomcat maxThread=300 в этом случае?

Спасибо


person c4il    schedule 05.07.2010    source источник
comment
Каким образом выполняется балансировка нагрузки между двумя Apache в конфигурации с двумя серверами?   -  person JoseK    schedule 06.07.2010
comment
Это делается маршрутизатором. Но никакой фильтрации по объему трафика он не выполняет. Таким образом, каждый Apache может получать 150 (и более) запросов одновременно.   -  person c4il    schedule 06.07.2010


Ответы (1)


Установка maxThreads на 300 должна быть хорошей - здесь нет фиксированных правил. Это зависит от того, видите ли вы, что в каких-либо соединениях отказано.

Слишком большое увеличение приводит к высокому потреблению памяти, но известно, что рабочие Tomcats работают с 750 потоками. Смотрите и здесь. http://java-monitor.com/forum/showthread.php?t=235

Вы действительно получили SEVERE ошибку? Я тестировал наш Tomcat 6.0.20, и он выдает сообщение INFO при пересечении maxThreads.

INFO: Maximum number of threads (200) created for connector with address null and port 8080

Он не отклоняет соединения, пока не будет пересечено значение acceptCount. По умолчанию 100.

Из документации Tomcat http://tomcat.apache.org/tomcat-5.5-doc/config/http.html

Максимальная длина очереди для входящих запросов на соединение, когда используются все возможные потоки обработки запросов. Любые запросы, полученные при заполнении очереди, будут отклонены. Значение по умолчанию - 100.

Как это работает

1) По мере увеличения количества одновременных запросов потоки будут создаваться до настроенного максимума (значение атрибута maxThreads).

Итак, в вашем случае на этом этапе появится сообщение «Максимальное количество созданных потоков (200)». Однако запросы по-прежнему будут стоять в очереди на обслуживание.

2) Если поступает еще несколько одновременных запросов, они ставятся в очередь до настроенного максимума (значение атрибута acceptCount).

Таким образом, без сбоев можно принять до 300 запросов. (при условии, что ваш acceptCount по умолчанию равен 100)

3) При переходе через это число возникают ошибки «Отказано в соединении» до тех пор, пока не будут доступны ресурсы для их обработки.

Так что все будет в порядке, пока не дойдете до шага 3

person JoseK    schedule 07.07.2010
comment
Очень приятный момент о acceptCount! Это должно работать отлично. Извините, я должен был быть более ясным в своем вопросе, но это был мой общий вопрос типа «что, если». Первоначально у меня был maxThread = 150, и я получил СЕРЬЕЗНУЮ ошибку. Поэтому я снова изменил его на значение по умолчанию 200, но потом понял, что 200 будет недостаточно по причине, которую я описал в вопросе. Большое спасибо за ответ. Теперь все имеет смысл. - person c4il; 07.07.2010