原文: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—流量控制之内存阈值相关推荐

  1. Rabbitmq - 配置

    目录 RabbitMQ 配置 简介 环境变量 配置文件 运行时参数和策略 RabbitMQ 配置 简介 默认配置,已经可以有效地运行RabbitMQ,并且在大多数情况下不需要更改配置.不过为了在生产环 ...

  2. RabbitMQ 架构原理

    1.RabbitMQ 架构原理 由于 RabbitMQ 实现了 AMQP 协议,所以 RabbitMQ 的工作模型也是基于 AMQP 的.理解这张图片至关重要. 1.1 Broker 中介 我们要使用 ...

  3. 【RabbitMQ】学习笔记

    目录 一.MQ入门 1.1 消息中间件的协议 1. AMQP协议 2. MQTT协议 3. OpenMessage协议 4. Kafka协议 1.2 消息分发机制 1.3 消息的高可用 集群模式1:M ...

  4. 学相伴飞哥RabbitMQ笔记以及个人总结

    一.什么是中间件? 1.简介 我国企业从20世纪80年代开始就逐渐进行信息化建设,由于方法和体系的不成熟,以及企业业务和市场需求的不断变化,一个企业可能同时运行着多个不同的业务系统,这些系统可能基于不 ...

  5. RabbitMq工作模型

    消息中间件RabbitMq工作模型 什么是MQ?为什么要用MQ? 为什么不用TCP.HTTP.RPC.WebService,为什么要用mq? 使用消息队列带来的问题 什么是AMQP协议? Rabbit ...

  6. RabbitMQ (十五) 镜像集群 + HAProxy1.7.8 负载均衡

    RabbitMQ 默认的集群模式,也就是普通模式,最大的问题就在于存储队列完整数据的节点一旦宕机, 如果是非持久化队列,则消息丢失;如果是持久化队列+持久化消息,则必须等该节点恢复. 所以后来 Rab ...

  7. (四)RabbitMQ消息队列-服务详细配置与日常监控管理

    (四)RabbitMQ消息队列-服务详细配置与日常监控管理 原文:(四)RabbitMQ消息队列-服务详细配置与日常监控管理 RabbitMQ服务管理 启动服务:rabbitmq-server -de ...

  8. RabbitMQ学习之Flow Control

    当RabbitMQ发布消息速度快于消费速度或者系统资源不足时,RabbitMQ将降低或阻断发布消息速度,以免服务器资源饱满而宕机,可以通过rabbitmqctl和web管理页面查看连接的状态为flow ...

  9. RabbitMQ学习之(二)_Centos6下安装RabbitMQ及管理配置

    首先yum方式安装依赖包 yum install ncurses-devel unixODBC unixODBC-devel 安装Erlang语言环境 wget http://erlang.org/d ...

最新文章

  1. 架构之道(4) - 最後的最後,让大家都知道自己在做什麽
  2. Linux 下hosts文件
  3. JMeter基础之——录制脚本
  4. MySQL 性能优化技巧(一)
  5. [Redis]c# redis缓存辅助类
  6. python模拟浏览器代码_python 模拟浏览器
  7. HarmonyOS USB DDK助你轻松实现USB驱动开发
  8. win10 无法安装Hp1020和HP1106打印机问题
  9. 《终身成长》读书笔记
  10. random.uniform()和random.random()区别
  11. java-php-python-医院挂号管理系统计算机毕业设计
  12. 我用20种编程语言送上新年的祝福,Happy new year!
  13. 微信小程序转盘demo
  14. 数禾科技:科技加持,让普惠“信用”服务触手可及
  15. 前端禁用中文半角输入法
  16. 计算机丢失rtl100.bpl,处理“未曾找到 rtl100.bpl,因而这个利用过程未能启用。重新安装利用过程可能会修复此问题。”...
  17. D - Dragon Balls Kattis - dragonballs
  18. 机器学习 | 吴恩达机器学习第六周编程作业(Python版)
  19. 无意间发现一个好用的视频转换gif图片的开源框架
  20. h5学习笔记之表单类型与属性

热门文章

  1. android 开源网站
  2. FXK Javascript
  3. HID 设备(鼠标) report descriptor解析
  4. sqlserver 分页存储过程
  5. 计算机与操作系统小结
  6. 【error】scripts/basic/fixdep: Syntax error: ( unexpected
  7. (学习笔记)Oracle表空间相关基本命令
  8. 划船训练常见错误:含胸驼背肩胛骨活动不足
  9. eclipse导入远程库的git项目
  10. 由作用域安全的构造函数想到的