Vertx-java-HttpClient:如何获取maxPoolSize和maxWaitQueueSize值及其影响

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

我在vertx java中创建了一个java后端服务。我使用httpClientio.vertx.core.http.HttpClient)和启用连接池连接到外部服务。我不包括吞吐量50。对于对我的服务的每个请求,我都需要连接到外部服务。我的服务的平均响应时间为4秒,外部服务的响应时间约为3秒。

现在我的问题是

  1. 如何获取HttpClient的maxPoolSizemaxWaitQueueSize值?
  2. maxPoolSizemaxWaitQueueSize值对内存和CPU有什么影响?
  3. 我可以设置为maxPoolSizemaxWaitQueueSize的最大值是多少?
  4. 我还应该使用setPipeliningHttpClient选项吗?
java connection-pooling vert.x vertx-httpclient
1个回答
0
投票

首先,请注意maxPoolSize适用于每个目的地。因此,如果您想要不同的池大小,请为后端创建不同的HttpClient

然后,除非您在受限的环境中工作,否则我建议将maxWaitQueueSize保留为默认值,即-1(无界)。给定您期望的负载,内存中队列的大小应该相对较小。

要确定池大小值,可以使用Little's law。要支持平均50秒的服务时间和50 req / sec的吞吐量,您需要150个连接池。

您可以为maxPoolSize设置的最大值取决于系统的配置方式。特别是,您需要配置打开文件描述符的最大数量。

对于您的用例,我相信您应该避免启用管道。首先,并不是所有的HTTP服务器都正确地支持它。其次,如果服务时间在0-3秒之间变化,则后端可能会保留响应,因为尚未处理管道中的先前请求(行头阻塞)。

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