Tomcat-maxThreads与maxConnections


81

在Tomcat中server.xmlmaxThreadsmaxConnections

我了解这maxConnections是服务器打开的连接数

并且maxThreads是请求处理线程的最大数量

但是,两个配置参数如何协同工作,显然您不会将其设置maxConnections为1000和maxThreads10

这两个配置参数之间是什么关系?

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

Answers:


115

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

  • BIO –阻止I / O(每个连接一个线程)
  • NIO非阻塞I / O(连接多于线程)

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

  • 生物将是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”参数,以保持较长的连接时间,这将加快所有速度。


12

Tomcat文档开始,对于阻塞I / O(BIO),默认值为,除非使用了Executor(线程池)maxConnectionsmaxThreads否则将使用Executor的'maxThreads'值。对于非阻塞IO,它似乎并不依赖。maxThreads


6
我不是拒绝投票的人,但我认为您尚未回答问题。您仅解释了默认值是什么,而没有向质询者讲授概念,而是有关概念的问题。
Tim Cooper

2
得到它了。我认为这个问题是在询问它们之间的关系,而不是它们的实际含义。
Swapnil 2014年

1
这个答案也很有用,因为它阐明了即使使用BIO,maxConnections也可以大于maxThreads(我认为这在Tomcat 7中是新的)
Ivan
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.