【问题标题】:During tsung load testing tcp connections are getting closed after 1024 connections在 tsung 负载测试期间,tcp 连接在 1024 个连接后关闭
【发布时间】:2019-01-29 11:56:55
【问题描述】:

我正在使用 tsung 进行分布式负载测试,以测试我的 mqtt 消息代理。我的消息代理现在可以理想地处理 10k 连接。当我用 tsung 测试它的 10k 并行连接时,我意识到我在服务器中的 tcp 连接正在关闭。

我设置了端口范围并增加了 ulimit,但我仍然可以使用 tsung 生成用户,但无法在服务器上获得 10k 个并发连接。

我什至使用名为mqtt-bench 的其他工具测试了代理,在此我可以生成并行连接,并且此处的 tcp 连接没有关闭。 tsung 上是否缺少任何配置?

tsung版本是1.7.0,erlang版本是10.1

【问题讨论】:

  • 您在哪个平台上运行测试?
  • 我在 linux 客户端和服务器上运行测试
  • @Candy 你能解决这个问题吗?
  • @DhruvSehgal 是的,我能够通过增加 linux 文件描述符的限制来解决它。

标签: tcp mqtt tsung


【解决方案1】:

这很可能是您达到了服务器进程的默认 ulimit。

通常进程一次限制为 1024 个打开的文件句柄(打开的套接字由文件句柄支持)。

您可以使用 ulimit 命令查看当前的软/硬限制,并将限制暂时更改为硬限制。您可以通过编辑 /etc/security/limits.conf 文件进行永久更改。

【讨论】:

  • 我已经将它添加到了我的 limits.conf 并且我的 ulimit -n 显示为 10000000。我仍然遇到同样的问题。
【解决方案2】:

我在处理多个客户时遇到了类似的问题。原因之一是您使用相同的客户端 ID 连接到 mqtt 服务器。

例如,如果客户端 A 连接到具有名称(client1)的 MQTT 服务器,然后客户端 B 连接到具有相同名称(client2)的 MQTT 服务器,那么它将断开旧连接。这可能是最简单的原因之一

【讨论】:

    【解决方案3】:

    如果没有证据,我们会相信你的话,使用 mqtt-bench 你会得到更多 超过 1024 个连接。 (一个 netstat -a -n | grep 1883 | wc -l 就足够了 向我证明这一点。)

    如果是这样,则表明问题不在于任何代理配置, 但使用您的 TSUNG 配置。 IE。你没有证明你的 tsung 过程 有更高的限制,例如。 cat /proc/PROCNUMBER/limits 其中 PROCNUMBER 是进程 你的 tsung 的号码。

    一旦你证明了这一点,下一步就是开始最大数量的 与TSUNG一起工作的连接,然后启动一个wireshark,然后再启动一个 与其他客户的连接。 PCAP 将准确显示正在发生的事情。如果新连接失败,则 原因将与连接成功以及其他一些原因不同 客户端断开连接。

    我们一直都在这样做,详见这篇博文 https://gambitcomm.blogspot.com/2016/06/how-is-realistic-mqtt-testing-different.html 和我们博客上的其他文章。

    【讨论】:

      【解决方案4】:

      您是否在客户端实例/etc/sysctl.conf 的以下位置将文件描述符限制增加到fs.file-max = 100000

      随着您增加打开限制,上述文件描述符限制也需要更新。

      请检查客户端实例中是否有足够的内存(例如 8 核,16GB RAM)。此配置兼容您从 tsung 脚本创建具有 3 个事务(连接、身份验证和发送消息)的 10k 并发用户负载。

      注意:在运行测试时监控 CPU 使用率!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-01-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-10-21
        • 2020-10-26
        相关资源
        最近更新 更多