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 ...
最新文章
- python的socket编程_Python Socket编程详细介绍
- 位运算和典型应用详解
- delphi SAP
- C语言-变量生存期及作用域
- 快讯|腔家政服务商“懒猪到家”完成200万种子轮融资,卡伊妮洗衣连锁投资...
- jbuilder2006注册机
- 替换IP java代码
- boost::histogram::detail::argument_traits用法的测试程序
- JMeter场景设置与监控
- WCF作为SAO技术的核心:契约
- 建立书签链接的html语言,书签链接
- 服务器虚拟化基础hcna,华为云计算全新大纲课程 乾颐堂HCNA-Cloud服务器虚拟化云计算实战课程 HCNA认证课程...
- 字体单位大小对照换算表(字号、磅、英寸、像素)
- VS编程,几个好用的Visual Studio插件推荐(一)
- python做矩阵初等行变换,matlab做初等行变换,python 矩阵初等行变换,解线性方程,numpy矩阵运算,sympy矩阵运算,求过渡矩阵,求具体某一基组下的坐标,解析几何
- 南大衣哥、北袁长标,恭喜谷传民新歌准备报送央视春晚
- Golang学习日志 ━━ Gin-Vue-Admin按步骤手动创建api及router、service
- Basic认证方式的配置
- 参考 | 升级 Win11 移动热点开不了或者开了连不上
- 中国天气网免费天气API
热门文章
- 原型设计20条军规(转)
- “并发用户数”、“系统用户数”和“同时在线用户数”的计算公式
- 网络——在网络上发送,接收数据
- du,df,fdisk,mkfs.ext3命令详解
- Android高级模糊技术RenderScript和FastBlur
- Vue.js 入门指南之“前传”(含sublime text 3 配置)
- XXX 不是当前用户的有效责任,请联系您的系统管理员
- UICollectionView实现的图片的多选效果(本人已封装好,简单操作)
- 跟小静读《jQuery权威指南》——目录
- Word2013中怎样设置同一文档内粘贴选项