Locust 负载测试脚本出错 - 连接中止。



我是Locust负载测试框架的新手,正在将我现有的基于Azure云的性能测试C#脚本迁移到Locust的基于Python的脚本中。我们的团队几乎完成了脚本的迁移。但在负载测试过程中,我们会遇到如下错误,由于CPU利用率高或Locust上有太多异常,无法从机器创建新请求。我们使用基于网络的蝗虫模式运行-详细信息如下所示。这些涂鸦在50到100个用户的较小负载上运行良好

">错误1-('连接中止。',远程断开连接('远程结束关闭的连接而没有响应',((">

">错误2:连接池已满,正在丢弃连接">

"***错误3:urlib3.exceptions.NewConnectionError::无法建立新连接:[Erno 110]连接超时***">

是的,我们在实用程序类上使用UrlLibs。但前2个错误似乎是蝗虫造成的。

我们的负载测试配置为:">3500个用户,孵化率为每秒5个用户"。在Azure上的8核、16 Gb Linux Ubuntu虚拟机上本机运行(无docker容器(。ulimit在Linux机器上设置为50000。

请帮助我们了解您的想法

样品测试如下

import os 
import sys
sys.path.append(os.environ.get('WORKDIR', os.getcwd()))
from locust import HttpLocust, TaskSet, task
from locust.wait_time import between
class ContactUsBehavior(TaskSet):

wait_time = AppUtil.get_wait_time_function(2)

@task(1)
def post_load_test_contact(self):
data = { "ContactName" : "Mane"
, "Email" : "someone@someone.com"
, "EmailVerifaction" : "someone@someone.com"
, "TelephoneContact" : ""
, "PhoneNumber" : ""
, "ContactReason" : "Other"            
, "OtherComment" : "TEST Comments 2019-12-30"
, "Agree" : "true"
}
self.client.post("app/contactform", self.client, 'Contact us submission', post_data = data)

class UnauthenticatedUser(HttpLocust):
task_set = ContactUsBehavior
# host is override-able
host = 'https://app.devurl.com/'

Locust的默认HTTP客户端使用内部使用urlib3的python请求。如果您正在进行大规模测试,您应该考虑另一个HTTP客户端。urllib 3(PoolManager(的连接池将重用连接,并限制每个主机在任何给定时间允许的连接数量,以避免累积太多未使用的套接字。因此,您可以选择调整游泳池:https://urllib3.readthedocs.io/en/latest/advanced-usage.html#customizing-池行为

或者,您可以尝试任何其他高性能HTTP客户端。例如:gevenhttpLocust还提供了一个内置的int客户端,它比默认的python请求更快:https://docs.locust.io/en/stable/increase-performance.html

如果客户端仍然无法处理大负载,则应该考虑在不同的节点中以集群模式运行Locust。

最新更新