1. 程式人生 > >RabbitMQ內存爆出問題解決思路

RabbitMQ內存爆出問題解決思路

mode 默認 隊列 keep lec mod eset process 配置

http://www.bubuko.com/infodetail-2121050.html

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內存爆出問題解決思路