2

我们有一组微服务,我想以与它们的访问方式一致的方式对其进行负载测试。

在选择Locust作为我选择的工具后,我发现 TCP 连接基础具有连接池,因为我不断看到如下消息:

WARNING/requests.packages.urllib3.connectionpool:连接池已满,丢弃连接:

据我了解,此消息告诉我它丢弃了它管理的池中的连接。我假设它仍然会创建一个新连接,并将其添加到它丢弃的那个位置。

  • 那是它的作用吗?
  • 它会在连接失败的情况下做到这一点吗?

我认为我们的微服务不会让任何会话保持打开状态。从远端连接到我们的服务,提供结果,然后关闭连接。因此,测试以不同于使用服务的方式处理连接。有没有办法让请求库不使用池,并且每次都完成设置和拆除通过它建立的所有连接的工作?

  • 我们有什么理由不想以这种方式进行测试吗?
  • 如果最好使用连接池进行测试,如果在生产中没有以这种方式进行测试,我应该如何预测负载差异?
4

1 回答 1

0

这是正确的。除非您将 urllib3 池设置为阻塞,否则它将根据需要生成比池配置容纳更多的连接,然后在请求完成后将其丢弃。

当您使用池的线程数多于池配置存储的连接数时,通常会发生这种情况。urllib3接受一个maxsize参数(默认为1),您可以将其设置为您正在运行的线程数。对于请求,您需要制作一个自定义适配器来执行此操作。看:

也就是说,这只是一些人忽略的警告,所以它不是失败。但是,如果这种情况在生产中经常发生,那可能意味着您应该调整配置,因为始终创建/丢弃新连接的成本相当高。

通常,出于这个原因,重用连接是一个好主意。

我的建议是这样的:

  1. 重复使用连接,或
  2. 增加池化的连接数以匹配线程数,或
  3. 如果您不想处理它,请禁用该警告。
于 2017-01-26T19:42:55.240 回答