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