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服务启不起来。

时间: 2024-11-10 02:24:48

RabbitMQ内存爆出问题解决思路的相关文章

内存溢出解决思路

内存溢出问题解决思路 这篇文章主要说下解决思路,当然也写出了对应的业务背景.用意呢,一是想记录问题处理过程,作为以后的经验:二呢,分享给大家,可以听听故事借鉴下. 开始了. 项目报错什么错呢? java.lang.OutOfMemoryError: Java heap space java.lang.OutOfMemoryError: GC overhead limit exceeded 报错的业务功能是: 导出数据为加密的EXCEL文档. 也就是 把10万条数据从数据库读出来,放到excel表

每一个程序员都应该知道的高并发处理技巧、创业公司如何解决高并发问题、互联网高并发问题解决思路、caoz大神多年经验总结分享

本文来源于caoz梦呓公众号高并发专辑,以图形化.松耦合的方式,对互联网高并发问题做了详细解读与分析,"技术在短期内被高估,而在长期中又被低估",而不同的场景和人员成本又导致了巨头的方案可能并不适合创业公司,那么如何保证高并发问题不成为创业路上的拦路虎,是每一个全栈工程师.资深系统工程师.有理想的程序员必备的技能,希望本文助您寻找属于自己的"成金之路",发亮发光. 目录: 场景及解决方法解读 认识负载 数据跟踪 脑图.caoz大神公众号分享 参考资料 秉承知其然及其

RabbitMQ 内存控制 硬盘控制

一.内存控制: vm_memory_high_watermark 该值为内存阈值,默认为0.4.意思为物理内存的40%.40%的内存并不是内存的最大的限制,它是一个发布的节制,当达到40%时Erlang会做GC.最坏的情况是使用内存80%.如果把该值配置为0,将关闭所有的publishing . rabbitmqctl set_vm_memory_high_watermark 0 Paging 内存阈值,该值为默认为0.5,该值为vm_memory_high_watermark的20%时,将把内

WKWebView中MessageHandler的内存泄漏问题解决过程

背景 项目中使用了WKWebView替换了之前的UIWebView,牵扯到Hybird开发,我们需要和H5交互,所以用到了WKWebViewConfiguration 中的 WKUserContentController 所以初始化代码如下 WKUserContentController *userContentController = [[WKUserContentController alloc] init]; [userContentController addScriptMessageH

RabbitMQ 内存和磁盘警告

内存和磁盘警告 有两种情况下,Rabbit MQ会停止读取客户端的连接socket,为了防止crash崩溃,这两种情况是: 内存使用达到配置值 磁盘空间下降到配置值下 在这两种情况下,服务器会临时阻塞连接-服务器会暂停读取发布消息的客户端的连接,连接心跳监控也会被禁用,在rabbitmqctl和管理查建中的所有网络连接如果是blocking状态,意味着他们没有尝试发送,因此可以继续,如果是blocked状态,意味着他们已经发布了,现在需要被暂停. 集群的警告 当运行Rabbit MQ集群的时候,

快速定位系统内存问题的思路

一.怎么样衡量系统内存1.查看系统内存的使用情况,比如已用内存,剩余内存,共享内存,可用内存,缓存和缓冲区的用量. 已用内存和剩余内存,就是已经使用和还未使用的内存. 共享内存,是通过tmpfs来实现的,它的大小就是tmpfs使用的内存大小,tmpfs其实也是一种特殊的缓存. 可用内存,就是新进程可以使用的最大内存,包括剩余内存和可回收内存 缓存,缓存包括磁盘读取文件的页缓存和Slab分配器中的可回收内存.页缓存用来缓存从磁盘读取的数据. 缓冲区,是对原始磁盘块的l临时存储,用来缓存将要写入磁盘

常见的内存问题分析思路

一 系统内存不足 Java 应用一般都有单机或者集群的内存水位监控,如果单机的内存利用率大于 95%,或者集群的内存利用率大于80%,就说明可能存在潜在的内存问题(注:这里的内存水位是系统内存). 除了一些较极端的情况,一般系统内存不足,大概率是由 Java 应用引起的.使用 top 命令时,我们可以看到 Java 应用进程的实际内存占用,其中 RES 表示进程的常驻内存使用,VIRT 表示进程的虚拟内存占用,内存大小的关系为:VIRT > RES > Java 应用实际使用的堆大小.除了堆内

爬虫网页编码问题解决思路

用python抓取网页,很容易遇到例如:'utf8' codec can't decode byte 0xc5 类似的编码的问题. 这里提供几种排查思路: 可以先查看你的Linux系统是不是UTF-8.如果不是的话可以修改: echo $LANG export LANG=en_US.UTF8 首先python2默认所有编码统一是unicode,因此你可以在代码前面加入 #-*-coding:utf-8 -*- 网页的编码可能为gbk,可以把gbk先decode,在统一encode为utf-8.

TCP重传问题解决思路

处理线上问题经常会碰到网络抖动的情况, 网络抖动有可能就是TCP重传导致,下面简单说下TCP重传的排查思路,不一定能完全解决问题 1. 找运维同事确定是否是网线问题, 如果是网线问题请更换网线 2. 使用ping 确定是不是网络问题, 通常系统自带的ping命令是走ICMP协议,这个是基于IP层的协议,和tcp协议是同一级别的,所以我们还需要使用 tcp协议的ping, tcp协议的ping我可以使用下面的脚本进行测试. 下载地址: http://pan.baidu.com/s/1dFFsich