在大量消息持续发送到broker的情况下,当broker到消费者之间的网络满了以后,broker的消息无法发送出去,导致在TransportConnection的dispatchQueue中堆积的消息越来越多。PendingMessageCursor中的消息不能被及时消费,导致broker判断消费者为慢消费者。当broker的内存被耗尽后JVM会频繁的进行full gc,由于消息不能被回收,所以消息对象会从年轻代转移到老年代而不会释放内存,导致broker几乎停止对外服务。
这个问题的根本原因是ActiveMQ只对接收消息作了流量控制,但是没有发送消息堵塞的情况。需要根据消息发送情况来控制消息的接收。
解决方案,在TransportConnection中的dispatchAsync对dispatchQueue中的消息数量做判断,当超过阈值就暂停dispatch,当前thread sleep,这样TopicSubscription就会暂停接收消息,避免内存耗尽。
相关推荐
详细描述了ActiveMQ消息过期-时间设置和自动清除解决方案。
ActiveMQ高并发处理方案
ActiveMQ队列消息过期时间设置和自动清除解决方案.docx
ActiveMQ开发规范及方案
activemq集群方案.doc 服务器 集群 多节点
linux下activemq安装包和配置文档
activeMQ 例子 真实环境下测试过
构建高可用的ActiveMQ系统在生产环境中是非常重要的,单点的ActiveMQ作为企业应用无法满足高可用和集群的需求,所以ActiveMQ提供 了master-slave、broker cluster等多种部署方式,但通过分析多种部署方式之后我认为...
activemq maven工程示例 xml配置;注解方式均有实现 资源注入,静态工具均有实现
activemq activeMq笔记.docx
Linux下activeMQ的启动和停止
ActiveMQ集群部署方式对比:Pure Master Slave方式,Shared Filesystem Master-Slave方式 ,Shared Database Master-Slave方式,Replicated LevelDB Store方式,Broker-Cluster部署方式....
最新activemq-cpp开发手册!
apache-activemq Linux版本
JMS教程+activemq以及activemq和tomcat的整合+整合实例代码+持久化消息配置以及工程+tomcat服务器的配置
activemq大集合,包含activemq中文和英文的文档。
请将本maven项目引入你自己的maven项目中(在你自己的pom.xml文件中配置这个项目的gourp和id以及版本号),通过模块化导入,注意把spring-activeMQ.xml加载到容器当中,运行tomcat启动项目,即可看到效果。
activemq书籍及工具 activemq书籍及工具 activemq书籍及工具 activemq书籍及工具 activemq书籍及工具