java - Vertx-java-HttpClient:如何派生 maxPoolSize 和 maxWaitQueueSize 值及其影响
问题描述
我在vertx java创建了一个 java 后端服务。我使用启用了连接池的httpClient ( io.vertx.core.http.HttpClient
)来连接到外部服务。我排除了 50 的吞吐量。对于我的服务的每个请求,我都需要连接到外部服务。我的服务的平均响应时间是 4 秒,外部服务大约是 3 秒。
现在我的问题是
- 如何为 HttpClient派生
maxPoolSize
和取值?maxWaitQueueSize
- 对内存和cpu有什么影响
maxPoolSize
和价值?maxWaitQueueSize
maxPoolSize
我可以设置的最大值是maxWaitQueueSize
多少?- 我还应该使用
setPipelining
选项HttpClient
吗?
解决方案
首先,请注意maxPoolSize
适用于每个目的地。因此,如果您想要不同的池大小,HttpClient
请为您的后端创建不同的池。
然后,除非您在受限环境中工作,否则我建议保留maxWaitQueueSize
默认值,即-1
(无界)。考虑到您期望的负载,内存中队列的大小应该相对较小。
要确定池大小值,您可以使用Little 定律。要支持 50 个请求/秒的吞吐量和平均 3 秒的服务时间,您需要一个包含 150 个连接的池。
您可以设置的最大值maxPoolSize
取决于系统的配置方式。特别是,您需要配置打开文件描述符的最大数量。
对于您的用例,我相信您应该避免启用管道。首先,并非所有 HTTP 服务器都正确支持它。其次,如果服务时间在 0-3 秒之间变化,则后端可能会保留响应,因为管道中的先前请求尚未处理(行头阻塞)。
推荐阅读
- javascript - 如何从 lambda 函数中传递数据
- java - MySql count (*) 在 ResultSet 和 WorkBench 中返回不同的值
- events - 在 VBScript 中处理 COM 事件取消
- c++ - 什么是 C++ 中的“变量‘i’未在范围内声明”?
- java - JPA @JoinColumn 无法与 REST 一起正常工作
- powershell - PowerShell Get-ADUser CSV 导出不起作用
- python - 获取用户列表:除了正在寻找用户/登录用户的用户
- java - 使用 JAXBContext 将 XML 转换为 Java 类
- key - 在 BCNF 定义中,为什么给出“Superkey”,而不是“minimal Superkey”?
- r - 在 r 中使用 posixct 更改日期格式