Подтвердить что ты не робот

Tomcat - maxThreads vs maxConnections

В Tomcat server.xml что такое maxThreads и maxConnections
Я понимаю, что maxConnections - это количество подключений, открытых для сервера
И maxThreads - это максимальное количество потоков обработки запросов
Но как два параметра конфигурации работают вместе, очевидно, вы не будете устанавливать maxConnections на 1000 и maxThreads на 10
Какова взаимосвязь между двумя параметрами конфигурации?

<Connector port="8443" protocol="org.apache.coyote.http11.Http11Protocol"
       maxThreads="250" SSLEnabled="true" scheme="https" secure="true"
       clientAuth="false" sslProtocol="TLS" connectiontimeout="20000"/>

Спасибо

4b9b3361

Ответ 1

Tomcat может работать в двух режимах:

BIO (один поток на соединение) или NIO (гораздо больше соединений, чем потоки).

Tomcat7 по умолчанию является BIO, хотя консенсус, похоже, "не использует Bio, потому что Nio лучше во всех отношениях". Вы устанавливаете это с помощью параметра "protocol" в файле server.xml - BIO будет "HTTP1.1" или "org.apache.coyote.http11.Http11Protocol", а NIO будет "org.apache.coyote.http11.Http11NioProtocol"

Если вы используете BIO, я считаю, что они должны быть более или менее одинаковыми. Если вы используете NIO, то на самом деле "maxConnections = 1000" и "maxThreads = 10" могут быть даже разумными. По умолчанию используются maxConnections = 10 000 и maxThreads = 200. С NIO каждый поток может обслуживать любое количество подключений, переключаясь назад и вперед, но сохраняя соединение, поэтому вам не нужно выполнять все обычное рукопожатие, которое особенно трудоемко связано с HTTPS, но даже с проблемой HTTP. Вы можете отрегулировать параметр "keepAlive", чтобы поддерживать связь дольше, и это должно ускорить все.

Ответ 2

Из Документация Tomcat. Для блокировки ввода-вывода (BIO) значением по умолчанию maxConnections является значение maxThreads, если только Executor (пул потоков) используется, в этом случае вместо этого используется значение 'maxThreads' из Executor. Для неблокирующего IO он, похоже, не зависит от maxThreads.