我使用ActiveMQ作为Java EE应用程序中的消息传递组件(使用GlassFish)。我们遇到了传递消息延迟和内存泄漏的问题。为了确定问题,我已经开始分析应用程序。内存分析显示org.apache.activemq.command.ActiveMQObjectMessage在“Live Allocated objects”列表中排名第二。随着应用程序运行时间的延长,活字节,活动对象和已分配对象的数量不断增加。
你会认为应该清除ActiveMQObjectMessage并在消息发布后再收集垃圾并且GC下次运行,但这似乎不是这样的! 有没有人有类似的问题,或者任何人都可以提供任何指示?
答案 0 :(得分:1)
您确定收到的消息是否已确认? 在创建会话时使用AUTO_ACKNOWLEDGE或在收到的消息上调用#acknowledge()来执行此操作。
所有未确认的消息都会被保留,直到单个消息被确认为止。
答案 1 :(得分:0)
什么对象持有所有ActiveMQObjectMessage对象?如果您正在分析您的应用程序,那么您应该能够确定这一点。你在使用什么样的探查器?我强烈推荐YourKit。
布鲁斯