Jms Activemq主题订阅服务器堆内存泄漏-为什么消息会增加?

Jms Activemq主题订阅服务器堆内存泄漏-为什么消息会增加?,jms,heap,activemq,publish-subscribe,Jms,Heap,Activemq,Publish Subscribe,我有一个连接到activemq主题的控制台应用程序。关于每个主题,每秒大约发布10条消息。经过一段时间的监控,应用程序内存正在增加,当所有内存都被使用时,应用程序崩溃。 请参阅下面的转储文件。为什么ActiveMQTopicSubsciter使用这么多堆?它也不可见,但ListEntries大约为14000条(这意味着14k条消息) 可能需要检查的几件事: 在您的订阅服务器中,您是否确定主题中的消息确实已被使用 你的具体要求是什么 如果在内存中保存消息仍然是一个问题,你应该考虑。文件游标的使用告

我有一个连接到activemq主题的控制台应用程序。关于每个主题,每秒大约发布10条消息。经过一段时间的监控,应用程序内存正在增加,当所有内存都被使用时,应用程序崩溃。 请参阅下面的转储文件。为什么ActiveMQTopicSubsciter使用这么多堆?它也不可见,但ListEntries大约为14000条(这意味着14k条消息)


可能需要检查的几件事:

  • 在您的订阅服务器中,您是否确定主题中的消息确实已被使用
  • 你的具体要求是什么

  • 如果在内存中保存消息仍然是一个问题,你应该考虑。文件游标的使用告诉ActiveMQ将消息假脱机到磁盘,而不是保存在内存中

    1)是的,它们被消费了,我肯定知道,因为它们是在我的onMessage方法中登录的。2)我没有指定任何。让我更新我的问题。。。我需要实时消费消息,因此如果某些消息变旧(1-2秒后没有被消费,它变旧了),我不需要它,我需要它之后的新消息。我读过constantPendingMessageLimitStrategy,但我不知道如何设置它(生产者和主题代码与service mix一起使用,我的消费者与java jms客户端一起使用)。是否可以从代理uri设置constantPendingMessageLimitStrategy(如2中的prefetchLimit)?查看上次转储后,我发现同样的问题存在,即使consuming工作了近20个小时也没有问题。所以堆在增加,但速度更慢。我看到activemq主题(通过使用constantPendingMessageLimitStrategy)将消息出列,但在转储中,订阅者持有消息,即订阅的使用者不会丢弃已消费的消息。有什么想法吗?我不能重现。。。有了一个快速测试用例,可以为一个主题生成/消耗一百万条消息,我的堆就稳定下来了。你的连接工厂库是什么版本的?我修复了这个问题。TopicSession是使用客户端确认而不是自动确认创建的。这就是主题订阅者保留所有消息的原因,因为它们没有被确认。