Memory RabbitMQ+;内存限制

Memory RabbitMQ+;内存限制,memory,memory-management,rabbitmq,Memory,Memory Management,Rabbitmq,我只是在查看RabbitMQ的配置详细信息,发现 [{rabbit, [{vm_memory_high_watermark, 0}, {disk_free_limit, {mem_relative, 1.0}} ] }] 这个配置是什么意思 vm\u memory\u high\u watermark设置为0意味着=>在rabbitmq应用程序启动后立即阻止所有发布服务器?但我们仍然看到rabbitmq能够对我们发送的任何MSG进行排队 16720

我只是在查看RabbitMQ的配置详细信息,发现

[{rabbit, [{vm_memory_high_watermark, 0}, 
           {disk_free_limit, {mem_relative, 1.0}}
          ]
}]
这个配置是什么意思

vm\u memory\u high\u watermark
设置为0意味着=>在rabbitmq应用程序启动后立即阻止所有发布服务器?但我们仍然看到rabbitmq能够对我们发送的任何MSG进行排队

16720 rabbitmq  20   0  142m  62m 2408 S    0  **1.6**   0:06.88 beam.smp
每当我们向代理发送MSG时,我们都会发现这个进程的内存使用量在增加。那么,这是否意味着即使水印设置为0,MSG仍在内存中


我们很想知道,如果ram的mem限制达到并且仍然发送MSG,会发生什么?要么出版商被封锁?或者,如果可用,将消息交换到磁盘?

vm\u memory\u high\u水印是一个与RabbitMQ中的内存流控制相关的百分比值

如果你看一下,你会发现它在“基于内存的流控制”标题下写道:

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

因此,通过将该值设置为0,它当然会立即触发!如果希望允许RabbitMQ使用更多内存,则需要增加该值

另一个重要注意事项:

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

因此,如果您尝试在发出警报时发布消息,则您的发布者将被阻止发送消息


如果要阻止所有发布服务器,请将vm\u memory\u high\u水印设置为0。如果要“禁用”基于内存的流控制,请将vm_memory_high_水印设置为100。请参阅以上链接中的详细信息:

值为0时,内存警报将立即关闭,从而禁用所有发布(如果希望全局禁用发布,这可能很有用;使用rabbitmqctl set_vm_memory_high_watermark 0)。为了防止内存报警完全消失,请设置一些高倍增,例如100


是的,我已经看过那个医生了。您所说的限制[%的MSG可能被丢弃]和阻止[没有MSG可以被发送]是什么意思?如果我指定0%,那么在应用程序启动时应打开警报?那么应该阻止所有发布者消息吗?还是节流?如果我完全禁用了基于内存的流控制[0%],会发生什么情况?在这种情况下被限制将导致发布服务器被完全阻止(因为警报已触发)。如果您指定0%,那么您是对的,警报将被触发,所有发布服务器将被阻止。如果要禁用基于内存的流控制,请将该值设置为100,0将阻止所有内容。实际上,我们刚刚运行了基本的发送器示例,发现正在发送MSG,但现在我们注意到未接收MSG。因此,作为一个整体,我们应该为消息提供一些ram mem,这样rmq至少可以将需要的MSG交换到磁盘“将vm_memory_high_watermark设置为100”这不应该是1,因为它是小数吗?@dmourati是正确的,它应该设置为
1
以等效于
100%
。因此,如果您希望将其保留在一个较低的金额,那么假设
90%
该值应为
0.9