Tomcat - maxThreads vs. maxConnections

2022-08-31 10:00:59

在Tomcat的对比中,什么是对战?server.xmlmaxThreadsmaxConnections

我知道这是向服务器开放的连接数。maxConnections

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

但是,这两个配置参数如何协同工作呢?- 显然你不会设置为1000和10。maxConnectionsmaxThreads

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

<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非阻塞 I/O(连接数比线程多得多)

默认情况下,Tomcat 7BIO,尽管共识似乎是“不要使用BIO,因为NIO在各个方面都更好”。(BIO已被完全抛弃在8.5.0及更高版本中。您可以使用文件中的协议参数进行此设置。server.xml

  • 生物将或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中特别耗时,但即使是HTTPS的问题。您可以调整“keepAlive”参数以将连接保持更长时间,这应该可以加快一切。


答案 2

Tomcat 文档中,对于阻塞 I/O (BIO),默认值是 除非使用 Executor(线程池)的值,在这种情况下,将使用 Executor 中的 'maxThreads' 值。对于非阻塞 IO,它似乎不依赖于 。maxConnectionsmaxThreadsmaxThreads


推荐