Tomcat - maxThreads 与 maxConnections

Posted

技术标签:

【中文标题】Tomcat - maxThreads 与 maxConnections【英文标题】:Tomcat - maxThreads vs maxConnections 【发布时间】:2014-08-31 22:52:59 【问题描述】:

在 Tomcat 中 server.xml maxThreadsmaxConnections 是什么

我知道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"
/>

【问题讨论】:

【参考方案1】:

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

BIO – 阻塞 I/O(每个连接一个线程) NIO – non-blocking I/O(连接比线程多)

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

BIO 将是 HTTP/1.1org.apache.coyote.http11.Http11Protocol 蔚来将是org.apache.coyote.http11.Http11NioProtocol

如果您使用的是 BIO,那么我相信它们应该或多或少相同。

如果您使用的是 NIO,那么实际上“maxConnections=1000”和“maxThreads=10”甚至可能是合理的。默认值为 maxConnections=10,000 和 maxThreads=200。使用 NIO,每个线程可以服务于任意数量的连接,来回切换但保留连接,因此您不需要进行所有通常的握手,这对于 HTTPS 特别耗时,但对于 HTTP 甚至是一个问题。您可以调整“keepAlive”参数以使连接保持更长时间,这应该会加快一切速度。

【讨论】:

默认协议似乎是“HTTP/1.1”,它使用自动切换机制 (tomcat.apache.org/tomcat-7.0-doc/config/http.html)“...选择基于 Java 的阻塞连接器或基于 APR/native 的连接器。如果 PATH (Windows) 或 LD_LIBRARY_PATH (在大多数 unix 系统上) 环境变量包含 Tomcat 本机库,将使用 APR/本机连接器。如果找不到本机库,将使用阻塞的基于 Java 的连接器"跨度> 如果maxThreads=200,服务器同时收到201个请求,会发生什么?【参考方案2】:

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

【讨论】:

我不是反对者,但我认为你没有回答这个问题。您只是解释了默认值是什么,没有教提问者概念,问题是关于概念的。 知道了。我认为这个问题是在询问它们之间的关系,而不是它们的实际含义。 这个答案也很有用,因为它阐明了即使使用 BIO,maxConnections 也可以大于 maxThreads(我认为这是 Tomcat 7 中的新功能)

以上是关于Tomcat - maxThreads 与 maxConnections的主要内容,如果未能解决你的问题,请参考以下文章

Tomcat调优及acceptCountmaxConnections与maxThreads参数的含义和关系

Tomcat调优及acceptCountmaxConnections与maxThreads参数的含义和关系

tomcat7 server.xml max thread

Tomcat优化步骤

tomcat的线程配置

Tomcat maxThreads 是接受线程或请求处理线程的配置