负载测试 ZeroMQ (ZMQ_STREAM) 以查找它可以处理的最大并发用户数

2024-02-18

有没有人有任何实际场景对 ZMQ 套接字进行负载测试以获得最大数量。他们可以处理的“并发用户”(不是吞吐量)?看起来 ZeroMQ 在 FD 限制方面存在一些严重问题。

场景是:有许多 Web 服务器框架吹嘘它们可以处理数百万个并发用户 - 现在,如果 ZeroMQ 无法处理超过 FD_SETSIZE 的情况,则不行。由于 FD 不仅是进程资源,而且也是机器资源,因此在同一台机器上生成新进程是没有意义的。

为了验证,我尝试加载测试 ZMQ_STREAM 以查找它可以维持多少并发用户。它是一个简单的“hello-world”响应服务器,仅侦听 ZMQ_STREAM 并为每个请求返回“hello world”(以严格接收后发送的方式)。

现在,在使用 JMeter 进行测试时(使用 users=1000),点击断言:zmq_assert (fds.size () <= FD_SETSIZE)。这意味着什么? ZMQ 持有 FD_SETSIZE 数量的 FD?但是(根据下面的代码)每个连接都会立即打开和关闭,我不明白如何可能在任何时间点同时打开多个 FD。

问题:如果是这种情况,基于 ZMQ 的应用程序该怎么办 实现百万用户并发连接? (除了 每个处理 1000 台机器的明显且毫无意义的解决方案 1000 个用户,或将 FD_SETSIZE 增加到一个非常大的数字)

任何人都知道如何以及为何使用这些 FD 以及它们如何耗尽(更重要的是其他框架(例如 nginx node.js)如何不存在此问题)请提供一些说明。

服务器代码(如果重要的话)如下:

#include <zmq.h>
#include <assert.h>
#include <string.h>
#include <iostream>
int main(void)
{
    void *ctx = zmq_ctx_new();

    void *socket = zmq_socket(ctx, ZMQ_STREAM);
    int rc = zmq_bind(socket, "tcp://*:8080");
    uint8_t id[256];
    size_t id_size = 256;
    char msg[4096];
    size_t msg_size = 4096;
    int nCount = 0;
    char http_response[] =
        "HTTP/1.0 200 OK\r\n"
        "Content-Type: text/plain\r\n"
        "\r\n"
        "Hello, World!";
    int nResponseLen = strlen(http_response);
    while (1) {
        id_size = zmq_recv(socket, id, 256, 0);
        msg_size = zmq_recv(socket, msg, sizeof(msg), 0);
        msg[msg_size] = '\0';
        std::cout << ++nCount << " -----\n";

        zmq_send(socket, id, id_size, ZMQ_SNDMORE);
        zmq_send(socket, http_response, nResponseLen, ZMQ_SNDMORE);

        zmq_send(socket, id, id_size, ZMQ_SNDMORE);
        zmq_send(socket, 0, 0, ZMQ_SNDMORE);
    }
    zmq_close(socket);
    zmq_ctx_destroy(ctx);
    return 0;
}

使用 JMeter,用户=1000


当您说“每个连接立即打开和关闭”时,您到底是什么意思?您绑定在stream套接字,它接受传入的请求while循环,它永远运行并且永远不会关闭任何东西。致电给zmq_close(socket);永远不会到达循环之后。

甚至消息的最后部分也明确使用ZMQ_SNDMORE,这应该保持连接打开,等待更多文本。我猜想,大概是为了让少数客户端能够以较低的重复连接开销。大概应该是:

zmq_send(socket, 0, 0, 0);

我不知道这些问题中的哪一个会释放资源以允许更多的客户端,如果有的话,但尝试在其中编写 HTTP 服务器或尝试制作 ZMQ 可能是对 ZMQ 的滥用(或者至少是误导)它可以扩展到数百万个并发对等点/客户端。

Node.js 和 nginx 是基于事件的并发 I/O 系统,它们在架构上与 ZMQ 显着不同,并且它们是为了解决不同的问题。试图将 ZMQ 纳入其中是错误的做法。您可能想要的是将 node.js 与 socket.io 一起使用,或者如果您将其用于 HTTP,则只需使用它的本机http module.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

负载测试 ZeroMQ (ZMQ_STREAM) 以查找它可以处理的最大并发用户数 的相关文章

  • 我可以为我的 RDS 实例使用 Amazon ELB 来实现负载均衡吗?

    我有两个问题 我可以在 RDS 实例上使用 ELB 来实现负载均衡吗 我可以在 EC2 实例上安装多个服务器并为所有服务器运行单个 ELB 实例吗 1 如果您的意思是只有一个 RDS 实例 那么在它前面的负载均衡请求就没有意义 如果您的意思
  • 如何使用 JMeter 进行负载测试 ASP.net Web 应用程序实现视图状态

    我是一名 net 开发人员 之前没有 JMeter 压力测试经验 我正在尝试对我使用 JMeter 开发的 ASP net 网站进行负载测试 使用 JMeter 的原因是它是一个具有很高知名度和可信度的开源工具 我提到这个链接 http b
  • ZeroMQ:重新绑定套接字时地址使用错误

    将 ZeroMQ 套接字绑定到端点并关闭套接字后 将另一个套接字绑定到同一端点需要多次尝试 之前的调用zmq bind直到成功失败并出现错误 地址正在使用 EADDRINUSE 下面的代码演示了这个问题 include
  • 了解 Zeromq Java 绑定

    我正在研究 Zeromq 作为 Java 项目中的消息传递解决方案 但我发现有关 Java 绑定的说明有点难以遵循 http www zeromq org bindings java http www zeromq org bindings
  • ZeroMQ性能测试。准确的延迟是多少?

    我正在使用 zmq 跨进程传输消息 并且我想做一些性能测试来获取延迟和吞吐量 官方网站给出了指南讲述如何运行性能测试 http zeromq org results perf howto 例如 我尝试过 local lat tcp 1521
  • 运行 vsts webtest 时遇到 JavaScript required 错误

    当在 VSTS 2010 Ultimate 中运行录制的 webtest 时 许多 https 请求面临 JavaScript required 错误 请帮助我进一步进行负载测试 Visual Studio 的 Web 测试发送和接收 HT
  • ZeroMQ 多线程:按需创建套接字还是使用套接字对象池?

    我正在利用 ZeroMQ N to N 发布 订阅模型构建一个 POC 在我们的应用服务器中 当处理 http 请求时 如果线程从数据库中提取数据 它就会使用该数据更新本地 memcache 实例 为了同步应用程序服务器集群中的其他 mem
  • 如何使 Zeromq PUB/SUB 删除旧消息而不是新消息(用于实时提要)?

    说我有一个PUB服务器zmq send 的实时消息SUB客户 如果客户很忙而无法zmq recv 消息足够快 那么消息将在客户端 和 或服务器 中缓冲 如果缓冲区变得太大 高水位线 则新消息将被丢弃 对于实时消息来说 这与人们想要的相反 应
  • 在 Visual Studio Webtest 中插入 120 秒等待

    我想在两个 Web 请求的执行之间添加 120 秒的延迟 我尝试过使用思考时间 但它不会暂停执行 120 秒 谁能告诉我如何添加等待以暂停执行 120 秒 在执行 2 个 Web 请求之后 然后继续执行下一个请求 我正在使用 Visual
  • 负载测试时如何测量CPU和内存

    我们在异构环境中使用 JMeter 并且希望在运行服务或 Web 应用程序的服务器上产生重负载时测量 CPU 和内存 您建议使用什么 是否有任何软件解决方案 开源或商业 可以将 CPU 和内存使用情况记录在文件或数据库中 谢谢你 您可以使用
  • X-RequestDigest:运行共享点页面记录的 Web 测试时出现错误

    我已成功记录并重播我的 sharepoint webtest 但一两周后 当我在 Visual Studio 中重播它时 我收到 403 FORBIDDEN 错误 我了解 X RequestDigest 的证书 令牌详细信息已过期 需要在我
  • 如果可以使用 JZMQ,为什么还需要 JeroMQ?

    简单的问题 为什么在 Java 上 移植 zmq 并将其称为 JeroMQ 是个好主意 JeroMQ是ZeroMQ社区的官方项目 它是 C libzmq 库的完整移植 支持 3 2 版本 优点 纯Java 因此无需通过JNI链接C C 这对
  • ZeroMQ套接字在什么情况下会丢弃或无法传递消息?

    是否有某种规范或其他解释来描述正常情况 对于每种通信类型 您可以预期在 ZeroMQ 套接字上发送的消息不会被 所有 侦听进程接收 例如 我有一个实验程序 它基本上假设所有订阅者PUB套接字接收在该套接字上发送的所有消息 在初始化握手之后
  • 将 ZeroMQ 与 C# 和 inproc 传输一起使用

    我正在尝试 ZeroMQ 并试图得到某物在职的 我的第一个想法是使用 inproc 传输设置 REP REQ 看看是否可以在两个线程之间发送消息 下面的大部分代码取自 clzmq 示例 但它似乎不起作用 服务器和客户端都绑定到传输 但是当客
  • 是否可以在 Arduino 上运行 ZeroMQ

    我想知道是否可以通过 ZeroMQ 与 Arduino 进行通信 我想使用 Arduino 来控制一些设备 并希望将大部分应用程序放在计算机上 为此 如果 Arduino 和控制器可以通过 Zeromq 以及 WiFi 或以太网扩展板进行通
  • REQ/REP 模式中的 ZeroMQ FiniteStateMachineException

    我有两个简单的组件 它们应该使用 REQ REP ZeroMQ 模式相互通信 服务器 REP Socket 是使用 pyzmq 在 Python 中实现的 import zmq def launch server print Launchi
  • 哪种 ZeroMQ 模式最适合异步套接字对?

    我有一个服务器 在亚马逊上运行 和一个连接到它的客户端 建立连接后 客户端和服务器仅相互通信并发送消息 e g 1 Client gt Server 2 Client gt Server 3 Client lt Server 4 Clien
  • AttributeError:“str”对象没有属性“decode”

    我将使用 pip 软件包安装程序在我的电脑上安装 ZeroMQ 库 我用https learning 0mq with pyzmq readthedocs org en latest pyzmq basics html installati
  • 使用 k6 测试 graphql 订阅

    是否可以使用 k6 框架测试 graphql 订阅 我尝试这样做 但没有取得太大成功 还尝试使用 k6 websockets 来做到这一点 但没有帮助 谢谢 Grapqhql Subscription是基于Websockets所以理论上可以
  • Python zmq SUB 套接字未接收 MQL5 Zmq PUB 套接字

    我正在尝试在 MQL5 中设置一个 PUB 套接字 并在 Python 中设置一个 SUB 套接字来接收消息 我在 MQL5 中有这个 include

随机推荐

  • 如何使用文化将变量中的波斯数字转换为英文数字?

    我想更改保存在变量中的波斯数字 如下所示 string Value to string Value 1036751 我怎样才能使用文化信息这样的简单方法来做到这一点 我的示例代码是 List
  • Bootstrap 合并行(rowspan)

    我正在测试推特引导程序 http twitter github io bootstrap 并陷入困境 带行的基本脚手架 我多次重新访问他们的文档 我可以看到嵌套列 您基本上可以在列中嵌套列 但我找不到 将行合并为一行并将其与未合并行旁边的列
  • SceneKit:如果目标是旋转相机并将节点 X 单位投影到相机前面,请使用变换或直接操作旋转/位置属性?

    对于体素艺术应用程序 目标是让用户在 SceneKit 场景中移动和旋转相机 然后点击以放置块 下面的代码允许用户通过平移来旋转相机 手势结束后 我们移动现有块 使其位于相机 Z 轴上的 X 单位 即相机前面的 X 单位 cameraNod
  • 方案中的参数传递

    谁能帮我理解Scheme中的各种参数传递模式 我知道Scheme实现了按值传递参数 但其他模式又如何呢 有没有关于Scheme中参数传递的好的文档 方案有only按值调用函数调用 还有其他可以在该语言中实现的替代方案 但如果您是初学者 那么
  • android firebase 12.0.0 - mAuth.getCurrentUser().getProvider() 方法被删除,如何获取提供程序名称?

    in firebase version 11 8 0 有一种方法叫做mAuth getCurrentUser getProviders 我可以打电话索取提供商名称列表 因此 对于电子邮件提供商来说 它是 密码 对于 Facebook 来说
  • 如何在 Visual Studio 中选择自定义菜单项的图标?

    我使用自定义命令 外部工具命令 作为 SolutionExplorer 的项目上下文菜单的条目 如何为我的自定义命令分配图标 我可以使用 修改选择 来选择命令的名称 并且可以选择 图像和文本 选项 但是 我没有找到用于选择用于我的自定义菜单
  • 如何在 Y 轴上绘制多个列的图表? (MS 图表控件)

    尝试遵循这个例子 http weblogs asp net dwahlin archive 2008 11 25 getting started with the asp net 3 5 chart control aspx http we
  • C++:是否有理由在非异常情况下使用异常

    让我给你举个例子 假设你有一个可以有子窗口的窗口类 每个子窗口都保存一个指向其父窗口的弱指针 每个窗口都有一个指向其子窗口的共享指针列表 现在我遇到的情况是 如果子窗口被破坏 我不知道它被破坏是因为父窗口被关闭 还是因为子窗口本身被关闭 因
  • 如何将我的整体程序分割成更小的、单独的文件?

    在我在网上看到的所有代码中 程序总是被分成许多较小的文件 不过 对于我所有的学校项目 我只需要一个巨大的 C 源文件 其中包含我使用的所有结构和函数 我想学习如何将我的程序分割成更小的文件 这似乎是专业标准 顺便问一下 这是为什么 只是为了
  • 如何在playframework 2.0中配置FS数据库?

    这有可能吗 在框架的第一个版本中似乎很容易完成 而不是使用 Default database configuration db default driver org h2 Driver db default url jdbc h2 mem
  • Spark 序列化错误:当我将 Spark Stream 数据插入 HBase 时

    我对 Spark 如何在数据格式方面与 HBase 交互感到困惑 例如 当我在下面的代码片段中省略 ERROR 行时 它运行良好 但是添加该行后 我发现了与序列化问题相关的 任务不可序列化 的错误 如何更改代码 发生错误的原因是什么 我的代
  • 如果 LONG_MAX 为 2147483647,strtol("-2147483648", 0, 0) 是否会溢出?

    根据规格strtol 如果主题序列具有预期的形式并且base的值为0 则以第一个数字开始的字符序列应被解释为整数常量 如果主题序列具有预期的形式并且base的值在2到36之间 则应将其用作转换的base 将每个字母赋予上面给出的值 如果主题
  • 识别iPhone中两个字符串之间的字符串[重复]

    这个问题已经存在了 可能的重复 根据条件从 iPhone 中的字符串中检索子字符串 https stackoverflow com questions 11100379 retrieving the substring based on c
  • Magento - 报价和订单之间的区别

    我对付款方式中如何调用报价和订单有疑问 据我所知 报价是提供的一组产品或服务 在 magento 中 报价数据是在单击 Onepage Checkout 的 下订单 按钮之前创建的 下订单后 订单数据将在 Magento 中创建 如果订单得
  • SLURM 对可执行文件进行多个并行调用

    我有一个可执行文件 需要多个选项和多个文件输入才能运行 可以使用可变数量的核心来调用可执行文件来运行 例如 可执行文件 a b c file fileA file fileB file fileZ cores X 我正在尝试创建一个 sba
  • 从一个文件中减去另一个文件中的行

    我找不到真正从一个文件中减去另一个文件的答案 我的目标是删除一个文件中出现在另一个文件中的行 应考虑多次出现 这意味着 例如 如果一行在文件 A 中出现 4 次 而在文件 B 中仅出现一次 则文件 C 应该包含其中的 3 行 File A
  • 具有相同菜单、相同布局的片段会导致重复的 menuitem

    我有一个包含 2 个片段的布局 这些片段使用相同的菜单 因为我有另一个布局 其中只有其中一个 在小屏幕设备中使用 我的问题是每个片段的菜单项显示在菜单中 并且由于它们来自同一菜单 因此它们彼此重复 我需要仅显示一个片段的菜单 而不是两者 无
  • 为“SFSpeechRecognizer”实现“用户停止说话”通知

    我正在尝试解决这个问题 SFSpeechRecognizer 检测话语结束 https stackoverflow com questions 42530634 sfspeechrecognizer detect end of uttera
  • Web 应用程序中的 ORM 是什么?

    我最近收到一家服务器公司的回复 询问我们是否在应用程序中使用 ORM 来完成筛选应用程序端的所有工作 如 Rails 或者我们是否编写大量 SQL 嵌入式函数等 这将使数据库服务器完成所有工作为您处理 谁能解释一下这是什么意思 我们的 We
  • 负载测试 ZeroMQ (ZMQ_STREAM) 以查找它可以处理的最大并发用户数

    有没有人有任何实际场景对 ZMQ 套接字进行负载测试以获得最大数量 他们可以处理的 并发用户 不是吞吐量 看起来 ZeroMQ 在 FD 限制方面存在一些严重问题 场景是 有许多 Web 服务器框架吹嘘它们可以处理数百万个并发用户 现在 如