Как работают коннекторы Tomcat?

Скажем, вы используете (блокирующий) разъем BIO, например:

<Connector port="8080" protocol="org.apache.coyote.http11.Http11Protocol" connectionTimeout="20000" redirectPort="8443" maxConnections="1000" maxThreads="200" />

и вы делаете 201 одновременных соединений, что происходит с последним соединением?

Если вы сделаете 1001 одновременных подключений, что произойдет с последним подключением?

Далее воспользуемся (неблокирующим) коннектором NIO protocol="org.apache.coyote.http11.Http11NioProtocol".

Будут ли отличия, если мы сделаем 201 и 1001 одновременных подключений?

Насколько я понимаю, поведенческих различий между NIO и NIO2 нет, отличается только реализация, так ли это?

Какой коннектор Tomcat 8 использует с настройками протокола по умолчанию protocol="HTTP/1.1", когда недоступен APR/собственный коннектор?

------------- редактировать ---------------

Я сделал небольшой сервлет следующим образом:

Thread.sleep(2000);
response.getWriter().write("ok");

Установите эти настройки connectionTimeout="20000" maxConnections="10" maxThreads="2" и сделайте 50 одновременных запросов. Все будет принято, а затем выполнено по 2 за раз (по мере завершения выполнения потоков). Ни один из запросов не истек по тайм-ауту или не получил ошибок, хотя connectionTimeout="20000" и maxConnections="10".

Точно так же и для protocol="org.apache.coyote.http11.Http11NioProtocol", и для protocol="org.apache.coyote.http11.Http11Protocol". Я думаю, разница проявляется, когда у вас есть Keep-Alive подключений. BIO блокирует поток на все время соединения, NIO освобождает поток после каждого запроса.

Когда я тестировал тот же сценарий, но с добавленным параметром acceptCount="15", как указал Dennis R, только тогда большинство запросов возвращали org.apache.http.conn.HttpHostConnectException: Connection to http://localhost:8080 refused.

---------- редактировать2 -----------

Обратите внимание, что если я установил это maxConnections="100" acceptCount="15", то все 50 соединений были приняты.


person Kaarel Purde    schedule 17.03.2016    source источник


Ответы (1)


Вот параметры конфигурации: Справочник по настройке Apache Tomcat 8 Executor и длина очереди по умолчанию в стандартной реализации: acceptCount=100

Максимальное количество подключений — это общее количество подключений (в очереди и в обработке). Соединения отклоняются, я полагаю, на основе того, что было достигнуто первым.

NIO не ограничен потоками процессора запросов.

Вот хорошее summary/comparison

person Dennis R    schedule 17.03.2016
comment
Ссылка на сводку/сравнение на сайте linuxfoundation не работает. - person cdonner; 12.12.2019