2010-09-09 1 views
2

Когда мой кот (6.0.20) предел MaxThreads достигнут, я получить ожидаемую ошибку:Tomcat не оправился от избытка Trafic

Maximum number of threads (XXX) created for connector with address null and port 80

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

Любые подсказки?

ответ

5

Рассмотрите возможность переключения на NIO, тогда вам не нужно беспокоиться о технических требованиях по 1 потоку на соединение. Без NIO предел составляет около 5K потоков (5K HTTP-соединений), а затем он дует. С NIO Java сможет управлять несколькими ресурсами одним потоком, поэтому предел намного выше. Граница представляет собой практически доступную память кучи, и примерно 2 ГБ вы можете подключиться к 20-килограммовым соединениям.

Настройка Tomcat для использования NIO так же просто, как изменение атрибута из <Connector> элемента в /conf/server.xml к "org.apache.coyote.http11.Http11NioProtocol".

+0

Я считал, что, но я не Не знаю, может ли это повредить классы, которые полагаются на ThreadLocal, например Spring OpenSessionInViewFilter. –

+0

Если эти классы хорошо написаны, они правильно используют 'ThreadLocal # remove()', тогда я не вижу проблем. Более того, потоки для запросов сервлетов HTTP уже по умолчанию объединены. В реальных производственных средах NIO чаще всего стандартно включается. – BalusC

+1

@Julio Faerman это не – nos