我们有一套微服务,我希望以与访问方式一致的方式加载测试。
在确定Locust作为我选择的工具后,我发现TCP连接支持有连接池,因为我一直看到这样的消息:
警告/ requests.packages.urllib3.connectionpool:连接池已满,丢弃连接:
据我了解,此消息告诉我它丢弃了它管理的池中的连接。我假设它仍然创建一个新连接,并将其添加到它丢弃的连接的位置。
我不认为我们的微服务可以保持任何会话开放。从远端到我们的服务进行连接,提供结果,然后关闭连接。因此,测试是以与使用服务不同的方式处理连接。有没有办法让请求lib不使用池,并且每次都要完成设置和拆除通过它进行的所有连接的工作?
答案 0 :(得分:0)
这是对的。除非您将urllib3池设置为阻止,否则它将根据需要生成比池配置为保留的更多连接,然后在请求完成后将其丢弃。
当您使用池的线程多于池配置存储的连接数时,通常会发生这种情况。 urllib3 采用maxsize
参数(默认为1
),您可以将其设置为您正在运行的线程数。对于请求,您需要制作自定义适配器才能执行此操作。参见:
那就是说,它只是一个人们忽略的警告,所以这不是失败。但是如果这在生产中发生了很多,那可能意味着你应该调整你的配置,因为创建/丢弃新的连接总是相当昂贵。
一般来说,出于这个原因重新使用连接是个好主意。
我的建议是按此顺序: