当前位置:编程学习 > JAVA >>

ActiveMQ内存溢出内存释放问题

能进这个帖子的相信的或多或少懂AMQ,所有,谢谢各位的热心,我在使用AMQ的过程中遇到了一些问题,也不清楚是配置还是AMQ的问题,特请教,谢谢。 
使用环境: 
ActiveMQ版本是:5.5 
Broker配置: 
MemoryLimit:256m 
Persistent:true 
StoreLimit:10g 
TempLimit:10g 
使用Topic: 
两个订阅者,其中一个离线。 
发送端对一个文件进行分块,每块1M发送到AMQ,通过jconsole分析发现 
1.每发送一个块消息,AMQ内存就上涨5,6M。 
2.在线的订阅者接收完消息后,内存使用大致停留在发送完最后一块消息出处,手动在jconsole中执行GC,没有明显下降。 
3.将另外一个订阅者启动,接收完所有消息,内存依旧没有下降,手动在jconsole中执行GC,内存回到初始正常范围。 
4.如果发送一个较大的文件(比broker配置的内存大),在jconsole中发送,amq内存直线上升,直到达到Amq最大内存,消息发送端报出内存溢出停止,然后amq内存一直停在最大值。当订阅者接收完后,执行GC,内存才会释放。 
下面是jconsole与JProfiler监控图,共两张, 
第一张是消息发送完,一个在线订阅者接收完后的内存使用情况。 
第二张是离线订阅者启动接收完消息,并手动在jconsole中执行GC的结果

--------------------编程问答-------------------- 图片太大,有意者请下载后打开看。 --------------------编程问答-------------------- 晕,为何就没人回复啊,大虾哪去了。 --------------------编程问答-------------------- 自己顶一下。 --------------------编程问答-------------------- policyEntry 设置似乎没起什么作用。
消息加入TTL,应该是可行的。有些policyEntry依赖TTL 像oldest

如果发送间隔比较长
<policyEntry memoryLimit="10mb" producerFlowControl="false" queue=">" advisoryForConsumed="false" advisoryForDelivery="false"  gcInactiveDestinations="true" inactiveTimoutBeforeGC="10000">
如上,10秒没消息删除topic

补充:Java ,  Java EE
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,