rabbitmq内存和磁盘告警

编程

  1. 集群中一个节点的内存或者磁盘受限,会引起整个集群不可用

  2. 建议生产和消费逻辑分摊到独立的 connection 之上,不发生任何交集

  3. 客户端可以通过添加 BlockedListener 来监听相应连接阻塞的信息

内存告警

RabbitMQ 服务器会在启动或者执行rabbitmqctl set_vm_memory_high_watermark <fraction> 的时候计算系统的内存大小,默认情况加

这个值为0.4, 表示当 RabbitMQ 使用的内存超过40%时,就会产生内存告警并阻塞所有生产者连接,一旦告警被解除,一切恢复正常.这个值

仅限制消息生产者,最坏的情况下, erlang 垃圾回收会导致两倍的内存消耗,也就是80%的占比

  • 内存告警配置

# 内存阈值可以通过 rabbit.config 配置文件来配置,例如:

[

{

rabbit,[

{

vm_memory_high_watermark, 0.5

}

]

}

].

# 或者

[

{

rabbit,[

{

vm_memory_high_watermark, {

absolute: "2048G"

}

}

]

}

].

# 也可以通过命令行rabbitmqctl set_vm_memory_high_watermark <fraction> 设置,这样设置重启后配置会失效

  • 内存换页

当 Broker 节点触及内存并阻塞生产者之前,它会尝试将队列中的消息换页到磁盘以释放内存空间,默认情况下,当内存达到内存阈值

的50%的时候回触发换页动作,如果内存阈值为0.4,就是说当内存使用超过 0.4 * 0.5 的时候会进行换页动作,可以通过配置项

vm_memory_watermark_paging_ratio 来修改此配置,此配置项只能通过不配置文件修改

  • 内存换页配置

[

{

rabbit,[

{

vm_memory_high_watermark, 0.5

},

{

vm_memory_watermark_paging_ratio, 0.5

}

]

}

].

磁盘告警

当剩余磁盘空间低于确定阈值时, RabbitMQ 同样会阻塞生产者,这样可以避免因为废纸九华的消息持续换页而耗尽内存导致服务崩溃,默

认情况磁盘阈值为50MB, 即当磁盘剩余空间小于50MB时会阻塞生产者并停止内存中的消息换页动作.这个阈值可以减小但并不能完全消

除因磁盘耗尽而导致崩溃的可能性,比如在两次磁盘空间检测期间,磁盘剩余空间从50MB 降低到0MB,建议这只为与操作系统所显示的内

存大小一致.

RabbitMQ 会定期检测磁盘剩余空间,检测的频率与上次执行艰涩的磁盘剩余空间大小有关,正常情况10秒执行一次,当剩余空间接近阈值

的时候,检测频率会有所增加,当要到达磁盘阈值的时候,检测频率为10次每秒

  • 磁盘告警配置

[

{

rabbit,[

{

disk_free_limit, "2G"

}

]

}

]

# 或者参考系统内存大小,设置一个动态值

[

{

rabbit,[

{

disk_free_limit, {

mem_relative, 1.0

}

}

]

}

]

# 也可以使用 rabbitmqctl进行设置

以上是 rabbitmq内存和磁盘告警 的全部内容, 来源链接: utcz.com/z/515267.html

回到顶部