RabbitMQ高级:内存磁盘的监控

RabbitMQ作为一个异步存储消息的中间件,并不是无休止的疯狂接收消息,消息的可靠性和存储靠的是磁盘和内存,因此我们需要时刻关注服务器的内存空间和磁盘空间

RabbitMQ的内存警告

如下图所示,可以通过图形化界面的Memory一栏,查看RabbitMQ目前内存使用情况

 在Memory内存使用空间一栏中,存在2个参数,分别是:76MiB6.4GiB high watermark

  • 76MiB RabbitMQ当前已经使用了76MB内存
  • 6.4GiB high watermarkRabbitMQ最高可以使用6.4GB内存

那么这个最大内存6.4GB是如何定义的呢?

RabbitMQ官方默认定义的内存阀值,是按照电脑内存的 0.4 取值,例如我的电脑内存是16GB,那么RabbitMQ最大内存为:16 * 0.4阀值 = 6.4GB

内存空间触发预警机制

RabbitMQ 默认的阀值是0.4,占比电脑总内存的0.4

当内存使用超过配置的阀值时,也就是已使用内存,超出上述图中的6.4GiB high watermark 值时,会触发内存预警,RabbitMQ会暂时阻塞客户端的连接,并且停止接收从客户端发来的消息,以此避免服务器的奔溃,客户端与服务端的心态检测机制也会失效。
 

RabbitMQ 内存设置

RabbitMQ的最大使用内存可进行配置,阀值和具体值都是针对 " 6.4GB high watermark" 进行设置,RabbitMQ的最大使用内存可以进行配置,具体有两种类型:阀值设置具体值设置

  • 内存阀值设置(默认0.4)
  • 具体内存值设置

!! 注意:内存阀值取值一般推荐范围为0.4到0.7之间, 表示占用电脑内存的多少占比,比如电脑8GB内存,取值为0.4,则8x0.4=3.2GB,则RabbitMQ最大使用内存为3.2GB

命令方式设置

# 1.内存阀值设置
sudo rabbitmqctl set_vm_memory_high_watermark  [建议0.4到0.7之间]

# 2.设置具体内存值:单位为:KB、MB、GB,根据需求所用
rabbitmqctl set_vm_memory_high_watermark absolute 50MB

1. 操作展示

2. 图形化界面查看:所有连接者处于阻塞状态,内存爆红(下图是设置具体值为50MB的效果)

 

已使用内存131mb,但RabbitMQ最大使用内存是50MB,图中是48mb是因为有部分损耗,实际设置值是50mb,内存爆红,所有连接处于阻塞状态。

配置文件方式设置

位置:/etc/rabbitmq/rabbitmq.conf

# 设置阀值:建议取值在0.4~0.7之间,不建议超过0.7
vm_memory_high_watermark.relative=0.4

# 设置具体值:单位为:KB、MB、GB
vm_memory_high_watermark.absolute=2GB

注意:两种方式二选一即可

RabbitMQ的磁盘预警

如下图所示,可以通过图形化界面的Disk space一栏,查看RabbitMQ目前磁盘使用情况

 在磁盘使用空间一栏中,存在2个参数,分别是:141GiB48MiB low watermark

  • 141GiB 当前剩余可用磁盘空间141GB
  • 48MiB low watermark剩余可用磁盘空间低于48mb将触发磁盘预警

与内存空间不同的是,磁盘预警的触发机制是:低于下限模式,而内存预警是,高于上限模式

磁盘触发预警机制

RabbitMQ 默认的磁盘下限配置是50 MB,图中显示48mb,是因为有损耗,实际是50默认

当磁盘剩余空间低于确定的阀值(默认50MB)时,RabbitMQ同样会阻塞生产者,目的是避免填充整个磁盘,导致Rabbit中断,可避免因非持久化的消息持续换页而耗尽磁盘空间导致服务器奔溃。

这个阀值可以减小,但不能完全消除因磁盘耗尽而导致奔溃的可能性,比如在两次磁盘空间检查空隙内,第一次检查时:60MB,第二次检查可能就是1MB,就会出现警告

RabbitMQ 磁盘空间设置

阀值和具体值都是针对 " 48MB low watermark" 进行设置,同样有两种设置类型:阀值设置具体值设置

  • 磁盘阀值设置
  • 具体磁盘值设置

!! 注意:相对阀值,建议范围在:1.0~2.0之间。(相对内存)

命令方式设置

# 1.磁盘阀值设置
sudo rabbitmqctl set_disk_free_limit memory_limit [建议1.0到2.0之间]

# 2.设置具体内存值:单位为:KB、MB、GB,根据需求所用
sudo rabbitmqctl set_disk_free_limit 20GB

注意:以上两种方式二选一即可

配置文件方式设置

位置:/etc/rabbitmq/rabbitmq.conf

# 设置阀值:建议取值在1.0~2.0之间
disk_free_limit.relative=2.0

# 设置具体值:单位为:KB、MB、GB
disk_free_limit.absolute=2GB

注意:两种方式二选一即可

内存换页

磁盘空间远远大于内存空间,因此需要进行资源的置换,不可能等到内存空间触及达到0.4阀值的时候,再把消息写入到磁盘中去

在某个 Broker 节点及内存阻塞生产者之前,它会尝试将队列中的消息,换页到磁盘以释放内存空间,持久化和非持久化的消息都会写入磁盘,其中持久化的消息本身就在磁盘中有一个副本,所以在转移的过程中持久化的消息会先从内存中清除掉。

结论:为了避免内存空间爆满 和 消息的持久化,会将内存中的消息定时写入到磁盘中去。

触发换页机制

默认情况下,内存达到50% 的阈值时就会换页处理,也就是说,在默认情况下该内存的阈值是 0.4 的情况下,当内存超过 0.2 时,就会进行换页动作。

比如:电脑1000MB 内存,内存阀值为0.4,配置的换页阀值是0.5,rabbit 最大能够使用的内存空间是 1000*0.4=400MB,由于配置的换页内存为 0.5,因此使用率在达到极限400MB之前,会把内存中的 200MB 进行转移到磁盘中,从而达到稳健的运行。

配置换页值

  可通过conf配置文件设置换页阀值

vm_memory_high_watermark.ralative = 0.4
vm_memory_high_watermark_paging_ratio = 0.7(设置值小于1)

思考:为什么设置小于1的值,如果设置为1,内部都已经达到极限了,再去换页意义不是很大了


 

其他:配置内存、磁盘空间注意

通过命令修改阀值在RabbitMQ服务器重启后将会失效,通过修改配置文件的方式设置的值,则不会随着重启而消失,但修改了配置文件必须重启RabbitMQ服务器才会生效

总结

不管是内存还是磁盘报警,设置参数只是解决方式之一,还可以通过增加内存条和硬盘来提高空间
 

  • 5
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值