Tomcat – maxThreads vs maxConnections

在Tomcat server.xml中,maxThreads与maxConnections是什么关系
我知道maxConnections是连接到服务器的连接数量
maxThreads是请求处理线程的最大数量
但是两个configuration参数如何协同工作,显然你不能将maxConnections设置为1000,maxThreads设置为10
两个configuration参数之间的关系是什么?

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

谢谢

Tomcat可以在两种模式下工作:

BIO(每个连接一个线程)或NIO(比线程多得多的连接)。

Tomcat7默认是BIO,虽然共识似乎是“不要使用Bio,因为NIO在各方面都比较好”。 你可以使用server.xml文件中的“protocol”参数来设置这个参数 – BIO将会是“HTTP1.1”or“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”参数,以保持更长的连接,这应该加快一切。

从Tomcat文档中 ,对于阻塞I / O(BIO), maxConnections的默认值是maxThreads的值,除非使用Executor (线程池),否则将使用Executor中的“maxThreads”的值。 对于非阻塞IO,它似乎不依赖于maxThreads