Locust 负载测试脚本出错 - 连接中止。',RemoteDisconnected
Posted
技术标签:
【中文标题】Locust 负载测试脚本出错 - 连接中止。\',RemoteDisconnected【英文标题】:Errors with Locust load testing scripts - Connection aborted.', RemoteDisconnectedLocust 负载测试脚本出错 - 连接中止。',RemoteDisconnected 【发布时间】:2020-06-05 03:56:55 【问题描述】:我是 Locust 负载测试框架的新手,并且正在将我现有的基于 Azure 云的性能测试 C# 脚本迁移到 Locust 基于 Python 的脚本。我们的团队几乎完成了脚本的迁移。但是在我们的负载测试过程中,我们遇到了如下错误,由于 CPU 利用率高或 Locust 上的异常太多,无法从机器创建新请求。我们正在使用基于 Locust 网络的模式运行 - 详细信息如下所示。这些脚本在 50 到 100 个用户的小负载上运行良好
"错误 1 -('Connection aborted.', RemoteDisconnected('Remote end closed connection without response',))"
“错误2:连接池已满,丢弃连接”
"** **错误 3 :urllib3.exceptions.NewConnectionError: : 无法建立新连接: [Errno 110] 连接超时****"
是的,我们在实用程序类上使用 UrlLibs。但前 2 个错误似乎是 Locust。
我们的负载测试配置是:“3500 个用户,孵化率为每秒 5 个用户”。在 Azure 上的 8 核、16 Gb Linux Ubuntu 虚拟机上本机运行(无 docker 容器)。 ulimit 在 Linux 机器上设置为 50,000。
请帮助我们您的想法
样例测试如下
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/'
【问题讨论】:
【参考方案1】:Locust 的默认 HTTP 客户端使用内部使用 urllib3 的 python-requests。 如果您正在进行大规模测试,您应该考虑使用另一个 HTTP 客户端。 urllib 3 (PoolManager) 的连接池将重用连接并限制每个主机在任何给定时间允许的连接数,以避免累积太多未使用的套接字。 所以你可以选择调整池:https://urllib3.readthedocs.io/en/latest/advanced-usage.html#customizing-pool-behavior
或者您可以尝试任何其他高性能 HTTP 客户端。例如:gevenhttp Locust 还提供了一个内置的 int 客户端,它比默认的 python-requests 更快: https://docs.locust.io/en/stable/increase-performance.html
如果客户端仍然无法处理大负载,您应该考虑在不同节点中以集群模式运行 Locust。
【讨论】:
非常感谢,我会尽快尝试并通知您。 我们检查了 FastHttpLocust 和 gevenhttp 客户端,但两者都没有响应对象的属性来帮助处理响应的 URL。意味着我们正在检查默认 locust http 客户端上的 http 响应的 Url,以比较用户在某些操作后登陆的位置。你有什么想法吗? 我们通过在同一台机器上添加更多从属设备解决了这个问题,因为 python 一次只使用 1 个核心。所以我们在同一台机器上打开了新的 locust slave,以便它使用其他“未使用”的核心来创建更多的请求/连接以上是关于Locust 负载测试脚本出错 - 连接中止。',RemoteDisconnected的主要内容,如果未能解决你的问题,请参考以下文章