最大 MQTT 连接数

2024-02-06

我需要创建一个服务器场,可以处理 5+100 万个连接、5+00000 个主题(每个客户端一个)、每秒处理 300k 消息。

我尝试了解各种消息代理的功能,因此我目前使用两个 RHEL EC2 实例 (r3.4xlarge) 来获取大量可用资源。所以你不需要查找它,它有 16vCPU,122GB RAM。我的使用远未达到这个限制。

我无法突破 600k 连接限制。由于客户端和服务器似乎都没有任何操作系统限制(大量的 RAM/CPU/等),那么什么限制了我呢?

我已编辑/etc/security/limits.conf如下:

* soft  nofile  20000000
* hard  nofile  20000000

* soft  nproc  20000000
* hard  nproc  20000000

root  soft  nofile 20000000
root  hard  nofile 20000000

我已编辑/etc/sysctl.conf如下:

net.ipv4.ip_local_port_range = 1024 65535  
net.ipv4.tcp_tw_reuse = 1 
net.ipv4.tcp_mem = 5242880  5242880 5242880 
net.ipv4.tcp_tw_recycle = 1 
fs.file-max = 20000000 
fs.nr_open = 20000000 
net.ipv4.tcp_syncookies = 0

net.ipv4.tcp_max_syn_backlog = 10000 
net.ipv4.tcp_synack_retries = 3 
net.core.somaxconn=65536 
net.core.netdev_max_backlog=100000 
net.core.optmem_max = 20480000

对于阿波罗: 导出 APOLLO_ULIMIT=20000000

对于 ActiveMQ:

ACTIVEMQ_OPTS="$ACTIVEMQ_OPTS -Dorg.apache.activemq.UseDedicatedTaskRunner=false"
ACTIVEMQ_OPTS_MEMORY="-Xms50G -Xmx115G"

我在客户端上为 eth0 创建了 20 个额外的私有地址,然后分配它们: ip地址添加11.22.33.44/24 dev eth0

我完全了解 65k 端口限制,这就是我执行上述操作的原因。

  • 对于 ActiveMQ 我得到:574309
  • 对于阿波罗,我得到:592891
  • 对于 Rabbit,我达到了 90k,但是日志记录很糟糕,并且不知道如何才能达到更高,尽管我知道这是可能的。
  • 对于 Hive,我的试用限制为 1000。正在等待许可证
  • IBM 想要用我的房子的成本来交换它们 - 不!

ANSWER:在执行此操作时,我意识到 /etc/sysctl.conf 文件中的客户端设置存在拼写错误:net.ipv4.ip_local_port_range

我现在能够在 188 秒内将 956,591 个 MQTT 客户端连接到我的 Apollo 服务器。


更多信息: 为了区分这是操作系统连接限制还是代理,我决定编写一个简单的客户端/服务器。

服务器:

    Socket client = null;
    server = new ServerSocket(1884);
    while (true) {
        client = server.accept();
        clients.add(client);
    }

客户端:

    while (true) {
        InetAddress clientIPToBindTo = getNextClientVIP();
        Socket client = new Socket(hostname, 1884, clientIPToBindTo, 0);
        clients.add(client);
    }

对于 21 个 IP,我预计 65535-1024*21 = 1354731 是边界。事实上我能够达到1231734

[root@ip ec2-user]# cat /proc/net/sockstat
sockets: used 1231734
TCP: inuse 5 orphan 0 tw 0 alloc 1231307 mem 2
UDP: inuse 4 mem 1
UDPLITE: inuse 0
RAW: inuse 0
FRAG: inuse 0 memory 0

这样套接字/内核/io 的东西就解决了。

我仍然无法使用任何经纪人来实现这一目标。

在我的客户端/服务器测试之后,这又是内核设置。

Client:

[root@ip ec2-user]# sysctl -p
net.ipv4.ip_local_port_range = 1024     65535
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_mem = 5242880      5242880 15242880
net.ipv4.tcp_tw_recycle = 1
fs.file-max = 20000000
fs.nr_open = 20000000

[root@ip ec2-user]# cat /etc/security/limits.conf
* soft  nofile  2000000
* hard  nofile  2000000    
root  soft  nofile 2000000
root  hard  nofile 2000000

Server:

[root@ ec2-user]# sysctl -p
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_mem = 5242880      5242880 5242880
net.ipv4.tcp_tw_recycle = 1
fs.file-max = 20000000
fs.nr_open = 20000000
net.ipv4.tcp_syncookies = 0
net.ipv4.tcp_max_syn_backlog = 1000000
net.ipv4.tcp_synack_retries = 3
net.core.somaxconn = 65535
net.core.netdev_max_backlog = 1000000
net.core.optmem_max = 20480000
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

最大 MQTT 连接数 的相关文章

  • 如何进行 TCP 打孔?

    问题如下 这是我当前的测试代码 但没有成功 static void Main string args if args Count 3 Console WriteLine Bad args var ep new IPEndPoint IPAd
  • 如何将我的 Kivy 客户端连接到服务器(TCP、套接字)

    因此 作为我的项目 2D 多人纸牌游戏 的一部分 我已经弄清楚如何在线托管和运行服务器脚本 我的计划是让两个单独的 kivy 客户端连接到服务器 这只是一个带有命令的脚本 但是我对操作顺序有些困惑 因为我think客户端连接可能与消息循环发
  • 套接字编程Python:如何确保收到完整消息?

    我正在使用 python 3 x 和套接字模块 服务器在 ipv4 地址上运行并使用 tcp 我阅读了一些有关如何发送和接收数据的教程 对于服务器或客户端 要确保发送整个消息 您可以简单地检查发送的数据量是否等于消息的大小 def myse
  • wireshark 和 tcpdump -r:奇怪的 tcp 窗口大小

    我正在使用 tcpdump 捕获 http 流量 并且对 TCP 慢启动以及窗口大小如何增加感兴趣 sudo tcpdump i eth1 w wget tcpdump tcp and port 80 当我使用 Wireshark 查看转储
  • 当数据在缓存中时 Apollo Client client.readQuery 返回 null

    这一定是用户错误 但我有一个简单的应用程序currentUser查询在 JWT 中查找 id 查找它并返回相应的用户 我可以查看 devtools 并看到它在缓存中 ref User 19 export const CURRENT USER
  • React 自定义挂钩内的 Apollo GraphQL 查询

    我正在尝试列出 Rick Morty API 中的所有角色 我编写了以下钩子以在我的组件中使用 该组件将呈现结果 当我对值进行硬编码时 例如 page 1 filter name Rick 查询运行得很好 如果我尝试使用变量 它会返回错误
  • 我的代码中某处存在无限循环

    我有这个 Java 游戏服务器 最多可处理 3 000 个 tcp 连接 每个玩家或每个 tcp 连接都有自己的线程 每个线程的运行情况如下 public void run try String packet char charCur ne
  • 基于 Spring Boot AMQP 的 JmsListener 在 TextMessage 上失败

    我有一个 Spring Boot 应用程序 在检索类型的 JMS 消息时遇到问题TextMessage来自 ActiveMQ 代理 如果消费者尝试从代理检索消息 它无法自动将消息转换为 TextMessage 而是将其视为 ByteMess
  • 查找网络中的所有IP地址

    我正在尝试用 C 来做这个 我需要找到我的网络中所有活动的 IP 地址并将它们显示在列表中 我可以 ping 网络中所有可用的 1 255 IP 地址 但我想让这个过程更快 此代码在大约 1 秒内扫描我的网络 255 个 D 级段 我在 V
  • 即使目标对象存在,Apollo readQuery 也会失败?

    我正在调用 readQuery 我收到一条错误消息 modules js hash 2d0033b4773d9cb6f118946043f7a3d4385825fe 25847 Error Can t find field resoluti
  • 由于将请求从主线程传递到工作线程,netty 中出现延迟?

    我有一些关于 Netty 服务器端 TCP IP 应用程序的问题 我想知道在将请求从老板线程传递到工作线程时是否会因为 netty 由于缺少配置等 而出现延迟 我在用 new OrderedMemoryAwareThreadPoolExec
  • 如何在NodeJS中测试socket.setKeepAlive

    我尝试在NodeJS中测试setKeepAlive 的功能 我在同一本地网络中的不同计算机上运行 Server js 和 client js 然后 我关闭了客户端计算机上的 WiFi 连接 断开互联网连接 15分钟后 仍然没有消息抛出 这是
  • 在 Perl 中如何接受多个 TCP 连接?

    我对 Linux 的 Perl 脚本有疑问 它的主要目的是成为 3 个应用程序之间的中间人 它应该做什么 它应该能够等待 UDP 文本 不带空格 udp port 当它收到 UDP 文本时 它应该将其转发到连接的 TCP 客户端 问题是我的
  • 从 Lambda 向 AWS IoT Core 发布 MQTT 消息

    我是 AWS 世界的新手 目前正在开发一项 Alexa 技能 该技能只需向 AWS IoT Core 代理发布一条 mqtt 消息 与之前创建的 事物 和主题进行交互 目前我正在使用 boto3 但我不确定这是正确的路径 这是代码 但在部署
  • Web 服务器可以处理多少个套接字连接?

    假设我要获得共享 虚拟或专用托管 我在某处读到服务器 计算机一次只能处理 64 000 个 TCP 连接 这是真的吗 无论带宽如何 任何类型的托管可以处理多少个 我假设 HTTP 通过 TCP 工作 这是否意味着只有 64 000 个用户可
  • 是否可以通过互联网在两个移动设备 (iPhone) 之间连接套接字?

    是否可以通过互联网在两个移动设备 iPhone 之间连接套接字 我正在尝试发现每个设备的IP并直接连接 我知道可以使用 Bonjour 来完成 但这只适用于本地网络 我需要通过互联网在两个设备之间建立高速连接 Thanks 如果你有两个 I
  • 如何在java应用程序中检测FIN - tcp标志?

    我在两台计算机之间有持久的 TCP 连接 第二台计算机不受我的控制 第二台计算机可以随时发送FIN标志 并且首先必须关闭当前连接 将FIN标志发送回第二台计算机 我如何知道第二台计算机正在发送 FIN 标志 以及何时必须调用 Java 应用
  • 在 Python 中通过 TCP 套接字发送文件

    我已经成功地将文件内容 图像 复制到新文件 然而 当我通过 TCP 套接字尝试同样的事情时 我遇到了问题 服务器循环未退出 客户端循环在到达 EOF 时退出 但服务器无法识别 EOF 这是代码 Server import socket Im
  • Apollo 无法在更新中访问 queryVariables:突变后

    我正在尝试使用 update 在执行突变后更新查询 问题是商店中的查询应用了多个不同的变量 我想更新查询并使用相同的变量返回它 我在文档中发现 updateQueries 有一个包含 queryVariables 的选项 它们是执行查询时使
  • C# Socket.receive连续接收0字节且循环中不阻塞

    我正在尝试用 C 编写一个最简单的多线程 TCP 服务器 它接收来自多个客户端的数据 每次连接新客户端时 都会建立套接字连接 并将套接字作为参数传递给新类函数 之后运行 while 循环并接收数据 直到客户端连接为止 这里的问题是 sock

随机推荐

  • Xcode 5.1 破坏了一些测试

    自从更新到 Xcode 5 1 以来 我在尝试运行单元测试 XCTestSuite 时遇到了错误 当我运行单独的测试方法时 出现错误Error while reading test scope bundle在控制台上没有结果 当我运行测试文
  • 如何在整个组织内共享数据

    组织在多个部门和应用程序之间共享关键数据有哪些好方法 举个例子 假设有一个主要应用程序和数据库来管理客户数据 组织中还有十个其他应用程序和数据库读取该数据并将其与自己的数据关联起来 目前 这种数据共享是通过数据库 DB 链接 物化视图 触发
  • 如何以最有效的方式将图像转换为字符串?

    我想将图像文件转换为字符串 以下作品 MemoryStream ms new MemoryStream Image1 Save ms ImageFormat Jpeg byte picture ms ToArray string formm
  • 如果索引列不同,则对一列的值求和?

    当索引列不同时 如何对一列中的值求和 最初 我有这样的 SQL 查询 SELECT COALESCE SUM ISNULL cast Quantity as int 0 0 AS QuantitySum FROM Records 也尝试这样
  • CDate 可以在没有 for 循环的 Range 上使用吗?

    我有一个列 其格式如下 Range A A NumberFormat dd mm yyyy 现在 我正在寻找一个有效的版本 For k 1 To Range A1 End xlDown Row from first to last row
  • 使用 zkcli 从 ZooKeeper 删除/删除 Solr 配置?

    我们在 ZK 中有一些旧的 Solr 配置 我们需要清理 删除 配置位于 configs AAA configs BBB 等 configs 下还有其他配置 Solr zkcli sh 脚本和文档没有提供删除配置的指导 唯一看起来明显的是
  • 获取当前活动 Xamarin 表单

    我使用 Leadtools SDK 进行条码阅读器 当我尝试获取当前活动时 它给我 null 这是我的代码 Stream resourceStream new MemoryStream Droid MainActivity activity
  • Thymeleaf:如何使用 Thymeleaf 在 JavaScript 中使用布尔运算符

    我正在使用 thymeleaf 在 javascript 中使用th inline javascript 但是当我们在 javascript thymeleaf 中添加布尔条件时 会抛出异常 如下所示 org xml sax SAXPars
  • 如何修复这个批处理文件? (打字机效果)

    我想让批处理脚本具有打字机风格 效果 同时删除文件并显示回声和其他内容 我希望它看起来像这样 Write1 echo Deleting Prefetches del s q C Windows Prefetch JAVAW pf echo
  • 在运行时根据请求参数创建EF Core DbContext

    背景 我们正在使用 ASP Net Core 和 Entity Framework Core 2 2 构建一个 Web 应用程序 我们正在连接到旧数据库 设置是有 16 个数据库 全部具有完全相同的架构 保存不同的上下文数据 我们无法改变这
  • Ctrl+M 使用 Sublime+Linux 运行 Makefile

    我目前正在考虑从 Pluma 以前的 gEdit 切换到 Sublime Text 到目前为止 我从 Sublime Text 中看到的内容非常好 I currently test Submlime Text 2 and would lik
  • 为什么 C 类型泛型表达式不能与 C++ 兼容?

    我似乎记得从一些可靠来源 即委员会成员在非官方渠道中发言 听到过模糊的评论 即 C 类型泛型表达式不会添加到 C 中 因为它们不能添加 据我所知 与 C 模板和重载相比 类型泛型表达式非常有限 但不存在需要定义为特殊情况的交互潜力 类型通用
  • 扩展实体

    我有一个名为 AbstractEntity 的类 它用 MappedSuperclass 进行注释 然后我有一个名为 User Entity 的类 它扩展了 AbstractEntity 这两个都存在于名为 foo bar framewor
  • 在向 COM 公开的 C# 对象上实现 ISupportErrorInfo

    我正在用 C 编写一个 COM 对象 我想使用它理解的机制 Err 对象 向 vba asp 客户端软件引发错误 在过去的好日子里 这意味着在 COM 对象上实现 ISupportErrorInfo 但我找不到任何有关如何在 C 对象中实现
  • 如何在selenium中按类名查找元素?

    在selenium中通过类名查找元素的语法是什么 请注意 我已经使用了以下语法 link elements driver find elements by class name BM30N 它给了我以下错误 C Users David De
  • iOS6大量下载超时

    看起来 iOS6 上使用 ASIHTTPRequest 的所有大型下载都会超时 有谁知道有任何 fork 已经为 iOS6 更新了这个库吗 我喜欢这个库并且真的不想切换 EDIT 此问题并非 ASIHTTPRequest 特有的 在测试 F
  • Django 1.2.4 CSRF验证失败

    当我执行 POST 表单时 Django 1 2 始终给我这个 CSRF 验证错误 我 认为 我已经完成了 Django 1 2 文档中要求的所有事情 即 确保 MIDDLEWARE CLASSES 包含在 django middlewar
  • SweetAlert确认对话框与asp.net listview删除?

    请帮我理解这一点 我创建了一个 ListView 显示来自 SQL 数据库的数据 我已经启用了插入 编辑和删除功能 一切正常 我想要什么 我想用SweetAlert http t4t5 github io sweetalert 提示用户确认
  • 遵循视图模型模式的最佳实践

    我现在正在学习 ASP NET MVC 一段时间 我遵循在互联网或书籍中找到的一些指南 并且我想确保在我的开发中遵循有关视图模型模式的良好实践 下面是一个博客实现的简单示例 您能否确认我走的路是正确的 假设我想在视图上显示帖子标题 描述 并
  • 最大 MQTT 连接数

    我需要创建一个服务器场 可以处理 5 100 万个连接 5 00000 个主题 每个客户端一个 每秒处理 300k 消息 我尝试了解各种消息代理的功能 因此我目前使用两个 RHEL EC2 实例 r3 4xlarge 来获取大量可用资源 所