在queueCapacity为0的情况下,Spring Boot线程池执行程序REST模板行为,这会降低REST API应用程序的性能

问题描述 投票:0回答:1

我陷入了一个奇怪的问题,无法找出其根本原因。这是我的其余模板线程池执行程序:

  connectionRequestTimeout: 60000
  connectTimeout: 60000
  socketTimeout: 60000
  responseTimeout: 60000
  connectionpoolmax: 900
  defaultMaxPerRoute: 20
  corePoolSize: 10
  maxPoolSize: 300
  queueCapacity: 0
  keepAliveSeconds: 1
  allowCoreThreadTimeOut: true

1)我知道,因为queueCapacity为0线程池执行程序将创建SynchronusQueue。第一个问题是,如果我给它一个正整数值(例如50),则应用程序性能会下降。据我了解,我们仅应在极少数情况下使用SynchronouseQueue,而不是在像我的基于Spring Boot Rest API的应用程序中使用。

2)第二件事是,我想了解SynchronousQueue如何在服务器(tomcat)上部署的spring boot rest API应用程序中工作。我知道SynchronousQueue的容量为零,因此生产者将阻塞,直到有可用的使用者或创建线程为止。但是在这种情况下,谁是消费者和生产者,因为所有请求都由Web或应用程序服务器服务。在这种情况下,SynchronousQueue基本上将如何工作?

我正在通过在计算机上运行JMeter脚本来检查性能。该脚本可以使用queueCapacity 0而不是> 0来处理更多情况。

我非常感谢任何见识。

我陷入了一个奇怪的问题,无法找出其根本原因。这是我的其余模板线程池执行程序:connectionRequestTimeout:60000 connectTimeout:60000 socketTimeout:...

spring-boot resttemplate java.util.concurrent threadpoolexecutor blockingqueue
1个回答
0
投票

1)否则,请不要显式设置queueCapacity,否则势必会降低性能。因为我们限制了可以驻留在队列中的传入请求,并且一旦固定线程池中的一个线程变为可用,它将被处理。

© www.soinside.com 2019 - 2024. All rights reserved.