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—流量控制之内存阈值相关推荐
- Rabbitmq - 配置
目录 RabbitMQ 配置 简介 环境变量 配置文件 运行时参数和策略 RabbitMQ 配置 简介 默认配置,已经可以有效地运行RabbitMQ,并且在大多数情况下不需要更改配置.不过为了在生产环 ...
- RabbitMQ 架构原理
1.RabbitMQ 架构原理 由于 RabbitMQ 实现了 AMQP 协议,所以 RabbitMQ 的工作模型也是基于 AMQP 的.理解这张图片至关重要. 1.1 Broker 中介 我们要使用 ...
- 【RabbitMQ】学习笔记
目录 一.MQ入门 1.1 消息中间件的协议 1. AMQP协议 2. MQTT协议 3. OpenMessage协议 4. Kafka协议 1.2 消息分发机制 1.3 消息的高可用 集群模式1:M ...
- 学相伴飞哥RabbitMQ笔记以及个人总结
一.什么是中间件? 1.简介 我国企业从20世纪80年代开始就逐渐进行信息化建设,由于方法和体系的不成熟,以及企业业务和市场需求的不断变化,一个企业可能同时运行着多个不同的业务系统,这些系统可能基于不 ...
- RabbitMq工作模型
消息中间件RabbitMq工作模型 什么是MQ?为什么要用MQ? 为什么不用TCP.HTTP.RPC.WebService,为什么要用mq? 使用消息队列带来的问题 什么是AMQP协议? Rabbit ...
- RabbitMQ (十五) 镜像集群 + HAProxy1.7.8 负载均衡
RabbitMQ 默认的集群模式,也就是普通模式,最大的问题就在于存储队列完整数据的节点一旦宕机, 如果是非持久化队列,则消息丢失;如果是持久化队列+持久化消息,则必须等该节点恢复. 所以后来 Rab ...
- (四)RabbitMQ消息队列-服务详细配置与日常监控管理
(四)RabbitMQ消息队列-服务详细配置与日常监控管理 原文:(四)RabbitMQ消息队列-服务详细配置与日常监控管理 RabbitMQ服务管理 启动服务:rabbitmq-server -de ...
- RabbitMQ学习之Flow Control
当RabbitMQ发布消息速度快于消费速度或者系统资源不足时,RabbitMQ将降低或阻断发布消息速度,以免服务器资源饱满而宕机,可以通过rabbitmqctl和web管理页面查看连接的状态为flow ...
- RabbitMQ学习之(二)_Centos6下安装RabbitMQ及管理配置
首先yum方式安装依赖包 yum install ncurses-devel unixODBC unixODBC-devel 安装Erlang语言环境 wget http://erlang.org/d ...
最新文章
- 架构之道(4) - 最後的最後,让大家都知道自己在做什麽
- Linux 下hosts文件
- JMeter基础之——录制脚本
- MySQL 性能优化技巧(一)
- [Redis]c# redis缓存辅助类
- python模拟浏览器代码_python 模拟浏览器
- HarmonyOS USB DDK助你轻松实现USB驱动开发
- win10 无法安装Hp1020和HP1106打印机问题
- 《终身成长》读书笔记
- random.uniform()和random.random()区别
- java-php-python-医院挂号管理系统计算机毕业设计
- 我用20种编程语言送上新年的祝福,Happy new year!
- 微信小程序转盘demo
- 数禾科技:科技加持,让普惠“信用”服务触手可及
- 前端禁用中文半角输入法
- 计算机丢失rtl100.bpl,处理“未曾找到 rtl100.bpl,因而这个利用过程未能启用。重新安装利用过程可能会修复此问题。”...
- D - Dragon Balls Kattis - dragonballs
- 机器学习 | 吴恩达机器学习第六周编程作业(Python版)
- 无意间发现一个好用的视频转换gif图片的开源框架
- h5学习笔记之表单类型与属性