【发布时间】:2021-04-23 00:25:42
【问题描述】:
我正在处理 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 配置为拒绝任何排队的操作?
非常感谢您。
最好的问候。
【问题讨论】:
标签: java spring spring-boot tomcat configuration