RabbitMQ—流量控制之内存阈值

原文:http://www.rabbitmq.com/memory.html

一、内存阈值生效时间

RabbitMQ服务器在启动时以及rabbitmqctl set_vm_memory_high_watermark fraction命令执行时,会检查计算机的RAM总大小

默认情况下,当RabbitMQ server的内存使用量超过RAM的40%,就会发出内存警报,并阻塞所有连接,一旦内存警报清楚(如,服务器将消息转存于磁盘,或者将消息投递给clients),服务又将恢复。

默认内存阈值设置为已安装RAM的40%。注意这并不会阻止RabbitMQ server使用内存量超过30%,它只是为了压制发布者。Erlang的垃圾回收期最坏情况下,可使用配置内存的2倍(默认情况下,RAM的80%)。因此,强烈建议开启OS swap或pape files。

32位架构倾向于每一个进程有2GB的内存限制,63架构的一般实现只允许每个进程为256TB,64位windows限制为8TB。但是,请注意,即使是64位操作系统下,一个32位进程往往只有一个2GB的最大地址空间。

二、通过配置文件修改内存阈值

1、使用相对值

内存阈值可通过编辑rabbitmq.conf来配置.下面的例子将阀值设为默认值0.4:

vm_memory_high_watermark.relative = 0.4

默认值0.4 代表的是已安装RAM的 40% , 有时候还更小.如:在 32位平台中,如果你安装有4GB RAM , 4GB 的40% 是 1.6GB, 但是 32-位 Windows 正常情况下限制进程为2GB,因此实际阀值是2GB的40% (即820MB)

2、使用绝对值

vm_memory_high_watermark.absolute = 1073741824
#同样, 也可使用内存单位:
vm_memory_high_watermark.absolute = 1024MiB

当RabbitMQ服务器启动时,内存限制将追加到RABBITMQ_NODENAME.log 文件中:

=INFO REPORT==== 29-Oct-2009::15:43:27 === Memory limit set to 2048MB.

三、通过命令修改内存阈值

其阀值也可以在broker运行时,通过 命令修改.

rabbitmqctl set_vm_memory_high_watermark fraction
# 或
rabbitmqctl set_vm_memory_high_watermark absolute memory_limit
# 内存单位也可以在命令中使用

. 此命令会在broker重启后生效. 当执行此命令时,内存限制可能会改变热插拔RAM,而不会发生报警,这是因为需要全部数量的系统RAM.

四、禁止所有发布

其值为0时,会立即触发报警并禁用所有发布 (当需要禁用全局发布时,这可能是有用的);

use rabbitmqctl set_vm_memory_high_watermark 0.

五、配置分页阈值

在broker达到最高水位阻塞发布者之前,它会尝试将队列内容分页输出到磁盘上来释放内存。持久化和瞬时消息都会分页输出 (已经在磁盘上的持久化消息会被赶出内存).

默认情况下,在达最高水位的50%时,就会发生这种情况. (即,默认最高水位为0.4, 这会在内存使用达到20%时就会发生). 要修改此值,可修改vm_memory_high_watermark_paging_ratio 配置的0.5默认值. 例如:

vm_memory_high_watermark_paging_ratio=0.8

上面的配置表示在内存使用达到30%时,就会启动,40%的时候会阻塞发布者.

也可以将vm_memory_high_watermark_paging_ratio 值设为大于1.0的值.在这种情况下,队列不会把它的内容分页到磁盘上.如果这引起了内存报警关闭,那么生产者会如上面预期的一样被阻塞.

关于配置文件详解:RabbitMQ配置文件详解

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值