欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

RabbitMQ—流量控制之内存阈值

发布时间:2024/4/15 编程问答 31 豆豆
生活随笔 收集整理的这篇文章主要介绍了 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配置文件详解

总结

以上是生活随笔为你收集整理的RabbitMQ—流量控制之内存阈值的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。