【问题标题】:RabbitMQ Generic Server terminatingRabbitMQ 通用服务器终止
【发布时间】:2017-11-30 16:28:16
【问题描述】:

我正在尝试将 1000 个客户端连接到 RabbitMQ。一切正常,直到 100 个连接,但一旦我尝试连接 1000 个连接,我就开始出错。日志文件中的错误之一如下。

=ERROR REPORT==== 28-Nov-2017::11:28:17 ===
** Generic server <0.17692.0> terminating
** Last message in was pre_hibernate
** When Server state == {q,
                         {amqqueue,
                          {resource,<<"/">>,queue,
                           <<"stomp-subscription-52t0wLkuhIW93v2ReUC3ug">>},
                          false,true,none,[],<0.17692.0>,[],[],[],undefined,
                          [],[],live,0},
                         none,true,rabbit_priority_queue,
                         {passthrough,rabbit_variable_queue,
                          {vqstate,
                           {0,{[],[]}},
                           {0,{[],[]}},
                           {delta,undefined,0,0,undefined},
                           {0,{[],[]}},
                           {0,{[],[]}},
                           0,
                           {0,nil},
                           {0,nil},
                           {0,nil},
                           {qistate,
                            "/var/lib/rabbitmq/mnesia/rabbit@ip-172-31-27-0/queues/3RBJZVANXRGKSPW9Y4JDQNMPL",
                            {{dict,0,16,16,8,80,48,
                              {[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],
                               []},
                              {{[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],
                                []}}},
                             []},
                            undefined,0,32768,
                            #Fun<rabbit_variable_queue.2.31077630>,
                            #Fun<rabbit_variable_queue.3.31077630>,
                            {0,nil},
                            {0,nil},
                            [],[]},
                           {undefined,
                            {client_msstate,msg_store_transient,
                             <<238,57,96,242,159,89,24,222,239,145,47,13,81,62,                               55,43>>,
                             {dict,0,16,16,8,80,48,
                              {[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],
                               []},
                              {{[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],
                                []}}},
                             {state,5963862,
                              "/var/lib/rabbitmq/mnesia/rabbit@ip-172-31-27-0/msg_store_transient"},
                             rabbit_msg_store_ets_index,
                             "/var/lib/rabbitmq/mnesia/rabbit@ip-172-31-27-0/msg_store_transient",
                             <0.311.0>,6029399,5898325,6094936,6160473,
                             {4000,800}}},
                           false,0,4096,0,0,0,0,0,0,infinity,0,0,0,0,0,0,
                           {rates,0.0,0.0,0.0,0.0,1511848696347412},
                           {0,nil},
                           {0,nil},
                           {0,nil},
                           {0,nil},
                           0,0,0,0,4096,default,0}},
                         {state,
                          {queue,
                           [{<0.17572.0>,{consumer,<<"T_0">>,false,0,[]}}],
                           [],1},
                          {active,1511848694492143,1.0}},
                         undefined,undefined,
                         {erlang,#Ref<0.0.0.176942>},
                         undefined,
                         {state,none,5000,undefined},
                         {0,nil},
                         undefined,undefined,undefined,
                         {state,
                          {dict,0,16,16,8,80,48,
                           {[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[]},
                           {{[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],
                             []}}},
                          delegate},
                         undefined,undefined,undefined,undefined,1,0,running}
** Reason for termination ==
** {{emfile,[{erlang,open_port,
                     [{spawn,"/bin/sh -s unix:cmd 2>&1"},[stream]],
                     []},
             {os,start_port_srv_handle,1,[{file,"os.erl"},{line,278}]},             {os,start_port_srv_loop,0,[{file,"os.erl"},{line,294}]}]},
    {gen_server2,call,
                 [rabbit_memory_monitor,
                  {report_ram_duration,<0.17692.0>,infinity},
                  infinity]}}

另外,由于某种原因,我不断收到以下警告

=WARNING REPORT==== 28-Nov-2017::11:28:17 ===
Memory monitor process not yet started: {gen_server,call,
                                         [vm_memory_monitor,
                                          get_cached_process_memory_and_limit,
                                          infinity]}

关于可能是什么问题的任何想法?

仅供参考,我所做的唯一配置更改如下:

rabbitmqctl eval 'file_handle_cache:set_limit(65000).'

【问题讨论】:

  • 我怀疑您的问题与系统耗尽文件句柄或其他一些有限资源(可能是内存)有关。你能把其中一些参数拿出来放在你的问题中吗?
  • 另外,看看这个页面看看有没有其他参数。我们真的没有足够的细节来提供任何东西,只能猜测可能出了什么问题。 rabbitmq.com/networking.html 我也建议在 ServerFault 上提问
  • 问题在于,虽然使用 rabbitmqctl 提高了文件描述符数量的限制,但在操作系统级别仍然没有更改。所以它无法创建必要的连接。
  • 是的,这听起来很正确。所以你是说这个问题已经结束了吗?也许您可以发布一个简短的总结作为答案,包括配置了多少文件描述符,以及有关您的主机配置的任何详细信息(RMQ 服务器版本、Linux 风格/版本等)
  • 我认为它无法打开新端口。根据 Erlang 效率指南:同时打开的 Erlang 端口的最大数量通常默认为 16,384。可以在启动时配置此限制。有关详细信息,请参阅 ERTS 的 erl(1) 手册页中的 +Q 命令行标志

标签: rabbitmq


【解决方案1】:

问题在于,虽然通过 rabbitmqctl 增加了打开文件描述符的最大数量,但操作系统级别的限制仍然没有提高。因此无法打开新连接。

如果 RabbitMQ 的“file_handle_cache”限制被击中,错误消息非常清楚。在这种情况下,在日志中它说警报已设置为打开文件描述符的最大数量,并且在警报清除之前不会建立新的连接。

但如果达到操作系统限制,则错误并不清楚,因此很难找出问题所在。

此外,考虑到 RabbitMQ 配置和操作系统限制,RabbitMQ Web 控制台会显示正确数量的可用套接字和文件处理程序。这对找出问题很有帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-07
    • 1970-01-01
    相关资源
    最近更新 更多