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的主要内容,如果未能解决你的问题,请参考以下文章

张同乐-从零开始,打造高效可靠的Locust性能测试

Python Locust性能测试框架实践

Locust负载测试框架

基于python的性能负载测试Locust-1 简介

使用 xlsx 文件对 Locust 进行负载测试

如何在 Locust 负载测试工具中获得详细的错误报告?