2012-08-29 51 views
12

我只是在寻找到的RabbitMQ的配置细节和整个的RabbitMQ +内存限制

[{rabbit, [{vm_memory_high_watermark, 0}, 
      {disk_free_limit, {mem_relative, 1.0}} 
      ] 
}] 

出来是什么配置呢?

vm_memory_high_watermark设置为0手段=>块立即所有发布的RabbitMQ的应用程序启动?但是我们仍然可以看到rabbitmq能够排列我们发送的任何消息。

16720 rabbitmq 20 0 142m 62m 2408 S 0 **1.6** 0:06.88 beam.smp 

每当我们发封邮件给经纪人,我们本身这个进程的内存使用量增加。所以,这是否意味着消息在内存中,尽管水印设置为0?

我们很好奇,想知道RAM的MEM达到极限,仍然封邮件被发送会发生什么?哪个发布商被封锁?或者消息被换出到磁盘(如果可用)?

回答

13

的vm_memory_high_watermark是一个百分比值与在存储器的RabbitMQ流量控制。

如果您在Memory flow control看一看,你会看到,它说,“基于内存的流量控制”标题下:

的RabbitMQ的服务器检测到的RAM安装在计算机上启动总额和当rabbitmqctl set_vm_memory_high_watermark分数被执行时。默认情况下,当RabbitMQ服务器使用安装的RAM的40%以上时,会引发内存告警并阻止所有连接。一旦内存告警被清除(例如,由于服务器将消息分页到磁盘或将它们传送给客户端)恢复正常的服务。

因此,通过将此值设置为0,当然它会立即触发!如果你想让RabbitMQ被允许使用更多的内存,那么你会想要增加值。

另一个重要提示:

默认内存阈值设置为已安装的RAM的40%。请注意,这不会阻止RabbitMQ服务器使用超过40%,这仅仅是发布者被限制的点。

因此,如果您尝试哟发布警报时发布消息,则会阻止发布者发送消息。

如果你想阻止所有的出版商,那么你会在vm_memory_high_watermark设置为0如果你想“禁用”基于内存的流量控制,然后从上面的链接设置vm_memory_high_watermark为100查看详细信息:

值为0会使内存警报立即关闭,从而禁用所有发布(如果您希望全局禁用发布,使用rabbitmqctl set_vm_memory_high_watermark 0)可能会有用。为了防止去关闭所有的内存报警,设置一些高倍频如100

+0

雅我已经通过了文档。你是什​​么意思,被扼杀[%的消息可能会被删除]并被阻止[不能发送消息]?如果我指定了0%,那么应用程序启动仪式的时候应该打开闹钟?那么所有的发布者消息都应该被封锁?或扼杀?如果我完全禁用基于内存的流量控制[0%],会发生什么情况? – Tamil

+1

在这种情况下进行调节将导致发布者完全被阻止(因为警报已被触发)。如果你指定0%,那么你是正确的,将触发警报,所有的发布者将被阻止。如果你想禁用基于内存的流量控制,将值设置为100,0将会阻止所有内容 – kzhen

+0

我已经更新了我的答案 – kzhen