java - Tomcat - maxThreads 与 maxConnections

标签 java tomcat

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

最佳答案

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

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

Tomcat 7BIO by default ,尽管共识似乎是“不要使用 BIO,因为 NIO 在各方面都更好”。 (并且 BIO 已经完全是 thrown out of 8.5.0 和更高版本。)您可以使用 protocol parameter 进行设置。在 server.xml 文件中。

  • 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”参数以使连接保持更长时间,这应该会加快一切速度。

关于java - Tomcat - maxThreads 与 maxConnections,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24678661/

相关文章:

java - 带PutRequest的多列系列

session - 从 IntelliJ IDE 本地运行时防止 Tomcat 序列化 session

Java:如何确保十六进制转换为二进制后大小为2的字节数组?

java - 如何检测字符串中的最后一个字符是否不是字母?

tomcat - nginx 转发到 tomcat 不工作

java - Apache 和 Tomcat 服务器跨域

java - '%' Tomcat字符解码异常

java - Eclipse + Tomcat + Maven 即使在添加 Maven 库后也找不到类异常

java - 面试题: Objects eligible for garbage collection

java - 如何将 ViewFlipper 中的计时器重置回 0