关于SpringBoot Tomcat acceptCount池
About SpringBoot Tomcat acceptCount pool
我正在处理springboot上的Tomcat配置。
假设我有以下配置:
server:
tomcat:
min-spare-threads: ${min-tomcat-threads:20}
max-threads: ${max-tomcat-threads:20}
accept-count: ${accept-concurrent-queue:1}
max-connections: ${max-tomcat-connections:100}
我有一个简单的 RestController,代码如下:
public String request(@Valid @RequestBody Info info) {
log.info("Thread sleeping");
Thread.sleep(8000);
return "OK";
}
然后我做以下测试:
- 我每秒发送 200 个 HTTP 请求。
- 我检查了日志,正如我预期的那样,我看到了 100 个同时执行,8 秒后我看到了最后一个(排队)。
- 拒绝其他执行。
我遇到的主要问题是,如果我对客户端调用有超时控制(例如,5 秒),排队的操作无论如何都会在服务器上处理,即使它在客户端被拒绝。
我想避免这种情况,所以我尝试了:
server:
tomcat:
min-spare-threads: ${min-tomcat-threads:20}
max-threads: ${max-tomcat-threads:20}
accept-count: ${accept-concurrent-queue:0}
max-connections: ${max-tomcat-connections:100}
但是这个“0”完全被忽略了(我认为在这种情况下它意味着“无限”)。
所以,我的问题是:
¿是否可以将 Tomcat 配置为在达到最大连接数限制时不对操作进行排队?
或者可能
¿是否可以配置 Tomcat 拒绝任何排队的操作?
非常感谢您。
此致。
acceptCount参数的值直接传递给操作系统:例如对于 UNIX-es,它被传递给 listen
。由于传入连接总是在 JVM 接受之前放入 OS 队列,因此低于 1
的值没有意义。 Tomcat 明确忽略这些值并保持其默认值 100
.
然而,Tomcat 中的真实队列是从 OS 队列接受的连接,但由于缺少处理线程 (maxThreads
) 而未被处理.您最多可能有 maxConnections - maxThreads + 1
个这样的连接。在您的情况下,有 81 个连接等待处理。
我正在处理springboot上的Tomcat配置。
假设我有以下配置:
server:
tomcat:
min-spare-threads: ${min-tomcat-threads:20}
max-threads: ${max-tomcat-threads:20}
accept-count: ${accept-concurrent-queue:1}
max-connections: ${max-tomcat-connections:100}
我有一个简单的 RestController,代码如下:
public String request(@Valid @RequestBody Info info) {
log.info("Thread sleeping");
Thread.sleep(8000);
return "OK";
}
然后我做以下测试:
- 我每秒发送 200 个 HTTP 请求。
- 我检查了日志,正如我预期的那样,我看到了 100 个同时执行,8 秒后我看到了最后一个(排队)。
- 拒绝其他执行。
我遇到的主要问题是,如果我对客户端调用有超时控制(例如,5 秒),排队的操作无论如何都会在服务器上处理,即使它在客户端被拒绝。 我想避免这种情况,所以我尝试了:
server:
tomcat:
min-spare-threads: ${min-tomcat-threads:20}
max-threads: ${max-tomcat-threads:20}
accept-count: ${accept-concurrent-queue:0}
max-connections: ${max-tomcat-connections:100}
但是这个“0”完全被忽略了(我认为在这种情况下它意味着“无限”)。 所以,我的问题是: ¿是否可以将 Tomcat 配置为在达到最大连接数限制时不对操作进行排队? 或者可能 ¿是否可以配置 Tomcat 拒绝任何排队的操作?
非常感谢您。
此致。
acceptCount参数的值直接传递给操作系统:例如对于 UNIX-es,它被传递给 listen
。由于传入连接总是在 JVM 接受之前放入 OS 队列,因此低于 1
的值没有意义。 Tomcat 明确忽略这些值并保持其默认值 100
.
然而,Tomcat 中的真实队列是从 OS 队列接受的连接,但由于缺少处理线程 (maxThreads
) 而未被处理.您最多可能有 maxConnections - maxThreads + 1
个这样的连接。在您的情况下,有 81 个连接等待处理。