Tomcat - maxThreads vs maxConnections

时间:2014-07-10 14:04:00

标签: java tomcat

在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"
/>

2 个答案:

答案 0 :(得分:89)

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

  • BIO - 阻止I / O(每个连接一个线程)
  • NIO - non-blocking I/O(比线程更多的连接)

Tomcat 7BIO by default,虽然共识似乎是“不要使用Bio,因为Nio在各方面都更好”。您可以使用server.xml文件中的protocol parameter进行设置。

  • BIO将为HTTP/1.1org.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”参数以保持连接更长时间,这样可以加速所有事情。

答案 1 :(得分:6)

Tomcat documentation开始,对于阻止I / O(BIO),默认值maxConnectionsmaxThreads的值,除非使用Executor(线程池)在这种情况下,将使用来自Executor的'maxThreads'的值。对于非阻塞IO,它似乎不依赖于maxThreads