【发布时间】: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