×
ABao阿宝
想是问题,做是答案;输在犹豫,赢在行动。
RabbitMQ持久化与内存管理
分类:
运维架构
发表:2020-06-05
围观(2730)
抢沙发
持久化机制 RabbitMQ的持久化分为消息持久化、队列持久化、交换器持久化。无论是持久化消息还是非持久化消息都可以被写入磁盘。 当RabbitMQ收到消息时,如果是持久化消息,则会储存在内存中,同时也会写入磁盘;如果是非持久化消息,则只会存在内存中。当内存使用达到RabbitMQ的临界值时,内存中的数据会被交换到磁盘,持久化消息由于本就存在于磁盘中,不会被重复写入。 消息的持久化是在发消息时,通过deliveryMode设置,队列、交换器也可以通过参数持久化,非持久化的消息、队列、交换器在rabbitmq-server重启后会消失,即使已经被写入磁盘。 内存告警 RabbitMQ中通过内存阈值参数控制内存的使用量,当内存使用超过配置的阈值时,RabbitMQ会阻塞客户端的连接并停止接收从客户端发来的消息,以免服务崩溃,同时客户端于与服务端的心跳检测也会失效。 内存控制 当出现内存告警时,可以通过管理命令临时调整。 ``` rabbitmqctl set_vm_memory_high_watermark
``` fraction为内存阈值,默认是0.4,表示RabbitMQ使用的内存超过系统内存的40%时,会产生内存告警,通过此命令修改的阈值在重启后会失效。可以通过修改配置文件的方式,使之永久生效,但是需要重启服务。 ``` # rabbitmq.conf vm_memory_high_watermark.relative=0.4 #vm_memory_high_watermark.absolute=1GB ``` RabbitMQ提供relative与absolute两种配置方式 relative:相对值,也就是前面的fraction参数,建议0.4~0.66,不能太大 absolute:绝对值,固定大小,单位为KB、MB、GB ``` rabbitmqctl set_vm_memory_high_watermark absolute
``` 内存换页 在RabbitMQ达到内存阈值并阻塞生产者之前,会尝试将内存中的消息换页到磁盘,以释放内存空间。内存换页由换页参数控制,默认为0.5,表示当内存使用量达到内存阈值的50%时会进行换页,也就是0.4*0.5=0.2。 ``` vm_memory_high_watermark_paging_ratio=0.5 ``` 当换页阈值大于1时,相当于禁用了换页功能 磁盘控制 RabbitMQ通过磁盘阈值参数控制磁盘的使用量,当磁盘剩余空间小于磁盘阈值时,RabbitMQ同样会阻塞生产者,避免磁盘空间耗尽。 磁盘阈值默认50M,由于是定时检测磁盘空间,不能完全消除因磁盘耗尽而导致崩溃的可能性,比如在两次检测之间,磁盘空间从大于50M变为0M。 一种相对谨慎的做法是将磁盘阈值大小设置与内存相等 ``` rabbitmqctl set_disk_free_limit
rabbitmqctl set_disk_free_limit mem_relative
# limit为绝对值,KB、MB、GB # fraction为相对值,建议1.0~2.0之间 # rabbitmq.conf disk_free_limit.relative=1.5 # disk_free_limit.absolute=50MB ``` 版权声明:本文为CSDN博主「Der_Dream」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/qq_38525526/java/article/details/100146428
标签:
rabbitmq
内存
持久化
本文
暂无
评论
回复给
点击这里取消回复。
验证码(*)
Top
Python
产品设计
学习笔记
网络基础
PHP
经营管理
运维开发
系统测试
Shell
Java
系统开发
Linux运维
运维架构
Go
×
本文 暂无 评论