当前位置: 首页 > 知识库问答 >
问题:

在Spring Boot中增加Tomcat的连接超时

暴才俊
2023-03-14

如何增加超时,以便在处理响应之前,请求不会超时?

Spring Boot中的Tomcat设置:

server.tomcat.max-connections=2000
server.tomcat.max-threads=200
server.connection-timeout=1200000

每秒的请求在15秒的过程中被提升到300,所有的请求都在下面的gatling(蓝色)中看到。

scn.inject(
      constantUsersPerSec(20) during (15), 
    )

这是由于使用200工作线程为300个请求提供服务。

控制器是在SpringMVC中编写的,它返回DeferredResult,执行异步请求处理,因此在处理响应后将恢复响应。

但即使是服务器。连接超时设置为高位1200000即将结束时有很多503(红色)

> status.find.in(200,304,201,202,203,204,205,206,207,208,209), b     78 (100.0%)
ut actually found 503

加特林。conf也设置为增加超时:

   timeOut {
      simulation = 8640000 # Absolute timeout, in seconds, of a simulation
    }
    ahc {
      #keepAlive = true                                # Allow pooling HTTP connections (keep-alive header automatically added)
      connectTimeout = 600000                          # Timeout when establishing a connection
      handshakeTimeout = 600000                        # Timeout when performing TLS hashshake
      pooledConnectionIdleTimeout = 600000             # Timeout when a connection stays unused in the pool
      readTimeout = 600000                             # Timeout when a used connection stays idle
      #maxRetry = 2                                    # Number of times that a request should be tried again
      requestTimeout = 600000           

共有1个答案

欧阳嘉
2023-03-14

根据Rcordoval的评论-

检查此属性:spring。mvc。异步的。请求超时=#异步请求处理超时前的时间量

此设置有助于其他gatling配置

spring.mvc.async.request-timeout=1200000

然而,根本原因是,当请求数量很大时,所有工作线程(200)都会忙于上传打开的连接(2000)(控制器将MultipartFile作为参数并返回一个delferredresult)

我认为当请求服务逻辑快而业务逻辑慢(在forkjoin.common池上运行)时,DeferredResult会发光。它不太适合MultiPartFile上传(阻塞和缓慢),当文件大小很大时更是如此,因为响应不会很快恢复(如上面每秒图表中的响应所示,只有在几秒钟后响应才会开始恢复,因为打开的连接是2000而工人只有200)。如果工人增加了,那么无论如何都会降低异步处理的优势。

在这种情况下,请求处理(上传和阻塞)很慢,业务逻辑很快。所以响应正在准备,但是所有的工作线程(200)都忙于服务越来越多的请求,结果响应没有恢复和超时。

可能会为使用DeferredResult的异步处理中的请求服务响应恢复提供单独的池?

 类似资料:
  • 这是我的改型类的实例:

  • 想知道如何在Tomcat7中增加并发连接的数量。我做了一些研究,并从apache文档中发现,将值设置为acceptCount、maxConnections和增加maxThreads就可以做到这一点,但当尝试时,我只能提交1000个请求中的500个。下面是server.xml文件中的代码片段- 谢了,西里什。

  • 当我试图从Tomcat服务器上可用的源获取数据时,我的应用程序会超时。我可以看到数据库查询是罪魁祸首,因为它在100秒内发送数据,因为它正在处理大量的数据。我的请求在60秒内超时,导致以下错误 我使用mod_代理从ApacheWeb服务器连接到tomcat服务器。我尝试将SSL连接器的增加到90000毫秒,但仍然请求在60秒内获得超时。我是否缺少任何需要更改的内容,以便增加连接超时。 我正在使用T

  • 我设置了一个密钥库,并从openssl.com.获得了SSL证书。我遵循的确切步骤如下:https://drive.google.com/file/d/0B6PUGo7cBLcDTzdkc0pzT2pTMk0/view?usp=sharing 不幸的是,即使在严格按照tomcat的说明并与客户支持人员合作后,我的https连接也超时了。 tomcat似乎已启动并运行,正在监听端口443,但我不知道

  • 我将我的项目部署到weblogic,我意识到我的连接没有关闭,因为weblogic服务器超载了。 我把它们修好了。但我仍然有同样的问题。在weblogic监控中,活动连接数正在增加,但在数据库(Oracle)中,此连接无效。

  • 我需要你帮忙解决这个问题 这是我在linux服务器上的的结果 现在这是我的MongoDB的结果 我想将MongoDb连接增加到10000个。 我尝试过不同的选择,比如我的mongod1。形态 这也是在启动mongodb的时候 但是什么都没用,都失败了,请让我知道如何在我的情况下将连接数增加到10000,提前谢谢。