Apache + Tomcat с mod_jk: настройка maxThread при балансировке нагрузки - PullRequest
6 голосов
/ 05 июля 2010

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

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

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

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

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

Спасибо

1 Ответ

7 голосов
/ 07 июля 2010

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

Слишком большое увеличение приводит к высокому потреблению памяти, но известно, что рабочие Tomcats работают с 750 потоками. Смотрите здесь также. http://java -monitor.com / форум / showthread.php? Т = 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

...