在春季启动中增加tomcat的连接超时

时间:2018-06-24 04:15:57

标签: java spring spring-boot tomcat gatling

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

Spring Boot中的Tomcat设置-

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

每秒请求数在constantUsersPerSec(20) during (15)的15秒过程中提高了scn.inject( constantUsersPerSec(20) during (15), ) 至300,所有请求均得到满足,如下面从加特林(蓝色)所示。

max-connections = 2000

这是由于200使用DeferredResult工作线程处理了300个请求。

用Spring MVC编写的控制器返回server.connection-timeout,该控制器执行异步请求处理,因此一旦响应被处理,将恢复响应。

Requests Per Sec

但是即使1200000设置为高数字> status.find.in(200,304,201,202,203,204,205,206,207,208,209), b 78 (100.0%) ut actually found 503 ,也有很多503指向结尾(红色)

   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           

Response Per Sec

Gatling.conf也设置为增加超时-

{{1}}

1 个答案:

答案 0 :(得分:0)

根据 Rcordoval -

的评论
  

检查此属性:spring.mvc.async.request-timeout =#   异步请求处理超时之前的时间

此设置可帮助完成其余的配线架配置

spring.mvc.async.request-timeout=1200000

但是,根本原因是,当请求数量很大时,所有工作线程(200)都会占用上载打开的连接(2000)(控制器将MultipartFile作为参数并返回DeferredResult)

我认为DeferredResult在请求服务逻辑快速而业务逻辑缓慢(在forkjoin.commonPool上运行)时发光。它不太适合MultiPartFile上载(阻塞和缓慢),并且在文件大小较大时不适合,因为从那以后响应就无法快速恢复(如从以上每秒响应图表中可以看到的,仅在几秒钟后响应就开始恢复,因为打开了连接)是2000,而工人只有200)。如果增加了工作人员,则无论如何都会减轻异步处理的优势。

在这种情况下,请求处理(上传和阻止)很慢,业务逻辑很快。因此响应已经准备就绪,但所有工作线程(200)忙于处理越来越多的请求,以至于响应没有恢复并因此而超时。

在使用DeferredResult进行异步处理时,可能会为request serveresponse resume设置单独的池?