首页 > 解决方案 > Tomcat:当连接数超过线程数时会发生什么?

问题描述

根据此链接,属性 server.tomcat.max-connections 和 server.tomcat.max-threads 确定应用程序中的最大连接数和最大线程数。

我有两个问题:

  1. 如果在给定时刻连接数超过线程数会怎样?没有得到线程的连接会发生什么?

  2. 如果服务器必须服务于 server.tomcat.max-connections 的更多请求,会发生什么?它会忽略线程连接数达到最大值后到达的请求吗?

标签: javaspring-boottomcat

解决方案


如果在给定时刻连接数超过线程数会怎样?没有得到线程的连接会发生什么?

他们将等待工作线程可用。

Tomcat 使用“接受队列”来保持接受它们和将它们传递给工作线程之间的连接。控制它的 Tomcat 配置参数是:

acceptCount:当所有可能的请求处理线程都在使用时,传入连接请求的最大队列长度。队列已满时收到的任何请求都将被拒绝。默认值为 100。

(来源https://tomcat.apache.org/tomcat-8.0-doc/config/http.html


如果服务器必须提供比 更多的请求会发生什么server.tomcat.max-connections?它会忽略线程连接数达到最大值后到达的请求吗?

根据上述,连接将被接受到队列限制,然后被拒绝。我认为这意味着客户端将获得 TCP/IP 级别的“拒绝连接”。

(如果客户端超时并关闭来自客户端的 TCP/IP 连接,队列中的请求会发生什么情况并不完全清楚。)


推荐阅读