当前位置: 首页 > 知识库问答 >
问题:

Rabbitmq在高负载:Socket.error[Errno 104]连接重置通过对等

鄢子平
2023-03-14

我一直使用芹菜与Rabbitmq作为后端。每当我发送一个高负载(大约600-1000)的任务到Rabbitmq,我得到以下错误socket.error[Errno 104]连接重置由对等

我一直在使用的一个示例命令是:

for i in {1..500}; do python client.py queue_name time_out bash -c "sleep 20 && touch folder/$i" & done
for i in {1..500}; do python client.py different_queue_name time_out bash -c "sleep 20 && touch folder/$i" & done

这是我的客户。py发送一个任务,该任务在worker上执行给定的bash命令,并轮询超时秒的结果。

我还尝试使用此命令在一段时间间隔内发送负载。它仍然给出相同的错误

for i in {1..10}; do for i in {1..50}; do python client.py queue_name time_out bash -c "sleep 60 && touch folder/$i" & done; sleep 10; done
for i in {1..10}; do for i in {1..50}; do python client.py different_queue_name time_out bash -c "sleep 60 && touch folder/$i" & done; sleep 10; done

是什么导致了这种行为?我能做些什么来处理这种情况?

共有1个答案

长孙逸仙
2023-03-14

=警告报告==文件描述符限制报警集 表示您的文件已达到filedescriptor限制。

你应该调整你的操作系统和RabbitMQ。

这里有几个链接,你应该遵循:

  • https://www.rabbitmq.com/production-checklist.html

打开文件句柄限制操作系统限制并发打开文件句柄的最大数量,包括网络套接字。确保将限制设置得足够高,以允许预期数量的并发连接和队列。

确保您的环境允许有效的RabbitMQ用户使用至少50K的开放文件描述符,包括在开发环境中。

根据经验,将并发连接的第95个百分位数乘以2,并添加队列总数,以计算推荐的打开文件句柄限制。高达500K的值并不不足,也不会消耗大量硬件资源,因此建议用于生产设置。有关详细信息,请参阅网络指南。

  • https://www.rabbitmq.com/networking.html

Erlang VM I/O线程池Erlang runtime使用线程池异步执行I/O操作。池的大小通过VM命令行标志配置,例如128。强烈建议使用RABBITMQ\u SERVER\u ADDITIONAL\u ERL\u ARGS环境变量覆盖该标志:

RABBITMQ_SERVER_ADDITIONAL_ERL_ARGS=“A 128”默认值为30。建议具有8个或更多可用内核的节点使用大于96的值,即每个可用内核使用12个或更多I/O线程。请注意,由于等待I/O,较高的值不一定意味着更好的吞吐量或更低的CPU消耗。针对大量连接进行调优

一些工作负载,通常称为“物联网”,假设每个节点有大量客户端连接,并且来自每个节点的流量相对较低。一个这样的工作负载是传感器网络:可以部署数十万或数百万个传感器,每个传感器每几分钟发射一次数据。优化最大并发客户端数可能比优化总吞吐量更重要。

有几个因素可以限制单个节点可以支持的并发连接数:

打开的文件句柄数(包括套接字)每个连接使用的RAM数量每个连接使用的CPU资源数量

希望能有帮助

 类似资料:
  • 我在RabbitMQ上犯了stainger错误。我发送了一些关于MQ和Php产品的信息,但出现了一些问题。我可以在出现异常“errno=104由对等方重置连接”的一分钟后发送消息。见下文: rabbitmq-3.6的版本。1,php-7.0版本。5,php amqp库的版本-“Videlavaro/php amqplib”:“~2.7 来自rabbitmq的日志:

  • 我正在尝试设置 rabbitmq 它可以通过 nginx 从外部(从非本地主机)访问。 nginx-rabbitmq.conf: rabbitmq.conf文件: 默认情况下,来宾用户只能从本地主机进行交互,因此我们需要创建另一个具有所需权限的用户,如下所示: 但是,当我尝试通过pika连接到Rabbitmq时,我得到了ConntionClo的异常 --[引发连接关闭异常]-- 如果我使用相同的参

  • 调试此程序时遇到一些问题。我总是在第一次启动我的应用程序时出现这个错误,然后间歇性地出现。有人能帮我扔掉一些调试技巧吗?我试过使用代理检查器,但没有用,我没有看到任何有用的东西。我尝试过在django设置中设置我的站点URL的建议。我尝试了使用和不使用http://以及使用和不使用端口。。。下面是一个毫无帮助的错误: 即使有了这个连接重置,这个应用程序似乎也能正常运行,但它一直让我疯狂地试图调试。

  • 问题内容: 我已阅读此文档片段: RabbitMQ自动连接/拓扑恢复 从Spring AMQP的第一个版本开始,该框架在代理发生故障的情况下提供了自己的连接和通道恢复。另外,如第3.1.10节“配置代理”中所述,当重新建立连接时,RabbitAdmin将重新声明任何基础结构Bean(队列等)。因此,它不依赖于amqp- client库现在提供的自动恢复。Spring AMQP现在使用amqp-cl

  • 当我尝试将Tornado和pyzmq Ioops结合起来时,我遇到了一个恼人的问题(虽然不是关键问题),正如pyzmq官方文档中所描述的那样。 我有一个运行tornado(T)服务器的进程,它接受来自客户端(C)的RESTAPI请求,并通过ZMQ传输将它们代理到另一个执行实际工作的进程(Z)。 如果C在Z回复T之前关闭连接,Z(tornado)输出一长串异常跟踪(见底部)。想象一下下面的例子: 这

  • 我正在尝试让一个简单的主机/客户端传输工作。我遵循了一个教程,服务器正常运行,但当客户端尝试连接时,它返回“由对等端重置连接”我真的不知道错误在哪里。