RabbitMQ--扩展--12--内存,硬盘阈值

RabbitMQ–扩展–12–内存,硬盘阈值


1、内存告警

  1. 当内存占用高于 内存阈值时,就会产生内存告警并阻塞所有生产者的连接,一旦告警被解除(有消息被消费或者从内存转储到磁盘等情况的发生),一切都会恢复正常。
  2. 在出现内存告警后,所有的客户端连接都会被阻塞。阻塞分为 blocking 和 blocked 两种。
    1. blocking:表示没有发送消息的链接。
    2. blocked:表示试图发送消息的链接。
  3. 内存阈值:
    1. 默认:硬件内存的0.4
    2. 范围:0.4-0.7 之间

1.1、设置 内存阈值

如果出现了内存告警,并且机器还有可用内存,可以通过命令调整内存阈值,解除告警。

1.1.1、配置文件写法

# 比值写法
vm_memory_high_watermark.relative = 0.6

# 绝对值写法 
vm_memory_high_watermark.absolute = 1GB

1.1.2、命令行写法

# 比值写法

rabbitmqctl set_vm_memory_high_watermark 0.6


# 绝对值写法 
rabbitmqctl set_vm_memory_high_watermark absolute 2gb

1.2、模拟内存告警

1.2.1、当前的使用内存

在这里插入图片描述

1.2.2、调整内存阈值,小于当前的使用内存

docker exec -it rabbitmq /bin/bash

rabbitmqctl set_vm_memory_high_watermark absolute 50MB

在这里插入图片描述

1.2.3、刷新管理页面

在这里插入图片描述

  1. 可以看到Memory变成了红色,表示此节点内存告警了
  2. 队列将不接受生产着发出的信息

1.2.4、压测

runjava com.rabbitmq.perf.PerfTest -x 1 -y 1 -h "amqp://admin:123456@192.168.187.171:5672" -u "memory-test-v1" -a --id "test1"

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

  1. 可以看到 生产者 的链接处于 blocking 状态
  2. 可以看到 消费者 的链接处于 blocked 状态。
  3. 队列的消息数量没有变化。

1.2.5、解除内存告警

docker exec -it rabbitmq /bin/bash

rabbitmqctl set_vm_memory_high_watermark absolute 1G

在这里插入图片描述
在这里插入图片描述

2、内存换页

  1. 在Broker节点的使用内存即将达到内存阈值之前,它会尝试将队列中的消息存储到磁盘以释放内存空间,这个动作叫内存换页
  2. 持久化和非持久化的消息都会被转储到磁盘中,其中持久化的消息本身就在磁盘中有一份副本,此时会将持久化的消息从内存中清除掉。
  3. 默认值:0.5
    1. 在内存到达内存阈值的50%时会进行换页动作。也就是说,在默认的内存阈值为 0.4的情况下,当内存超过 0.4x 0.5=0.2 时会进行换页动作。
    2. 建议小于0.7

2.1、设置 内存换页

  1. 通过修改配置文件,调整内存换页分页阈值
  2. 不能通过命令调整

# 此值大于1时,相当于禁用了换页功能。 
vm_memory_high_watermark_paging_ratio = 0.75

3、磁盘告警

  1. 当磁盘剩余空间低于磁盘的阈值时,RabbitMQ 同样会阻塞生产者,这样可以避免因非持久化的消息持续换页而耗尽磁盘空间导致服务崩溃
  2. 默认值:50MB
    1. 表示当磁盘剩余空间低于 50MB 时,会阻塞生产者并停止内存中消息的换页动作
  3. 这个阈值的设置可以减小,但不能完全消除因磁盘耗尽而导致崩渍的可能性。比如在两次磁盘空间检测期间内,磁盘空间从大于50MB被耗尽到0MB

3.1、设置 磁盘阈值

如果出现了内存告警,并且机器还有可用内存,可以通过命令调整内存阈值,解除告警。

3.1.1、命令行写法


 

# disk_limit 为固定大小,单位为MB、GB 
# rabbitmqctl  set_disk_free_limit <disk_limit>

# 设定磁盘剩余空间低于100G即报警
rabbitmqctl  set_disk_free_limit 100G


# fraction 为相对比值,建议的取值为1.0~2.0之间 
rabbitmqctl set_disk_free_limit mem_relative <fraction>

3.1.2、配置文件写法

# 设定磁盘剩余空间低于100G即报警
disk_free_limit.absolute = 100


# 设定磁盘空间低于内存RAM 20倍时报警
配置文件写法 disk_free_limit.relative = 20

3.2、模拟磁盘告警

3.2.1、当前的磁盘空间

在这里插入图片描述

3.2.2、调整磁盘阈值,大于当前磁盘空间

docker exec -it rabbitmq /bin/bash

rabbitmqctl set_disk_free_limit 100GB

在这里插入图片描述

3.2.3、刷新管理页面

在这里插入图片描述

  1. 可以看到Disk space变成了红色,表示此节点磁盘告警了
  2. 后续步骤同模拟内存告警。

4、API监控

使用API可以查看mq状态

上述的内存与磁盘报警分别为mem_alarm disk_free_alarm,如果这两个值为true,则需要及时响应。

curl -i -u admin:admin "http://192.168.0.191:15672/api/nodes/rabbit@mq01"

可以作为监控数据使用。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值