我正在处理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配置为拒绝任何排队的操作?
事先非常感谢。
致以最诚挚的问候。
1条答案
按热度按时间qlfbtfca1#
acceptcount参数的值直接传递给操作系统:例如,对于unix es,它被传递给
listen
. 由于传入连接总是在jvm接受它之前放入os队列中,因此值低于1
毫无意义。tomcat显式忽略这些值并保留其默认值100
.但是,tomcat中真正的队列是从os队列接受的连接,但是由于缺少处理线程而没有被处理(
maxThreads
). 你最多也可以maxConnections - maxThreads + 1
这样的联系。在您的情况下,有81个连接等待处理。