RabbitMQ内存爆出

RabbitMQ升级到3.6.1版本后,随着业务和系统功能的增加,出现RabbitMQ内存陡增直至服务宕掉的情况。内存增加时,在management管理控制台上可以见到如下警告:

The management statistics database currently has a queue of xx events to process. If this number keeps increasing, so will the memory used by the management plugin. You may find it useful to set the rates_mode config item to none.

 

应对策略:

1. 根据提示,将rabbitMQ.config中的rates_mode配置项设置为none。

弊端:这样就没法在management控制台上看到message rate的数据了。不能跟进一个队列实时publish和ack的任务量

 

2. 重启统计数据库(释放内存)

3.6.2以前的版本:rabbitmqctl eval 'exit(erlang:whereis(rabbit_mgmt_db), please_terminate).'

3.6.2以后的版本:rabbitmqctl eval 'rabbit_mgmt_storage:reset().'

  rabbitmqctl eval 'rabbit_mgmt_storage:reset_all().'可以重启所有node的统计数据库

  另外:3.6.10版本的management控制台已经可见reset按钮

 

3. 修改rabbitMQ的统计频率(改为15s,默认5s)

broker运行过程中修改:rabbitmqctl eval 'application:set_env(rabbit, collect_statistics_interval, 15000).' 

config文件修改:将rabbitMQ.config中的collect_statistics_interval配置项设置为15000。

NOTE:如果没有做config文件的修改,broker运行中的修改将在rabbitmq-server服务重启后失效。

 

4. 限制stats collector processes的使用内存(改为100,默认250)

config文件修改:将rabbitMQ.config中的stats_event_max_backlog配置项设置为100。

可能需要手动在rabbitMQ_Management节点中添加stats_event_max_backlog的设置项 (此处不确定,官方提示修改此值,但config并未见到此配置

 

5. 提高rabbitmq的内存低水位线(默认0.4)

broker运行过程中修改:rabbitmqctl set_vm_memory_high_watermark 0.6

config文件修改:将rabbitMQ.config中的vm_memory_high_watermark配置项设置为0.6

NOTE:如果没有做config文件的修改,broker运行中的修改将在rabbitmq-server服务重启后失效。

 

NOTE:修改config文件时,要留意配置项后面的逗号[,],最后一个配置项不能有逗号,多个配置项之间用逗号隔开。此处处理不好会造成rabbitmq服务启不起来。

 

其他

rabbitmq运行时修改参数:

1. 修改rates_mode

rabbitmqctl eval 'application:set_env(rabbitmq_management, rates_mode, none).'

RabbitMQ是一种消息中间件,用于实现不同应用程序之间的通信。内存积压是指RabbitMQ中消息队列持续增加,消费者无法及时处理和消耗队列中的消息,导致队列中的消息越来越多,进而占用越来越多的内存空间。 造成RabbitMQ内存积压的原因可能有多种。首先,消费者处理消息的速度可能较慢或者不稳定,无法及时处理队列中的消息。其次,生产者发送消息的速度可能过快,导致消息队列迅速增长。此外,由于消费者异常退出或者网络问题,也可能导致消息队列中的消息不能及时消耗。 解决RabbitMQ内存积压的方法有多种。首先,可以通过增加消费者的数量,提高消息处理的速度。其次,可以优化消费者的处理逻辑,确保消费者能够高效地处理消息。另外,可以调整生产者的消息发送速度,避免过快地发送消息。如果遇到消费者异常退出的情况,可以及时处理并重启消费者,保证消息能够被正常消耗。 除了以上方法,还可以通过设置RabbitMQ的一些参数来调整内存使用情况,例如设置队列的最大长度和最大内存使用量,避免内存过载。另外,可以通过配置死信队列来处理无法被消费的消息,以防止消息堆积。 总之,解决RabbitMQ内存积压需要综合考虑消费者、生产者和RabbitMQ本身的因素,通过优化消息处理逻辑、调整消息发送速度和设置合适的参数,保证消息队列能够稳定地运行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值