我已根据activemq-cpp库的示例解决方案进行了测试。
在测试中,我向队列发送了50,000条消息,在它们全部发送完毕后,我会消耗它们,会话中有INDIVIDUAL_ACKNOWLEDGE
,每条消费消息都有message->acknowledge()
。消费者是异步的。
发送邮件之前java.exe的内存(私有工作集):209,320 KB。发送所有消息后:412,548 KB。 消费后所有消息:434,637 KB。意思是,虽然队列大小为0,但内存未被释放。 我错过了什么? 感谢。
答案 0 :(得分:1)
除了上面提到的JVM处理之外,还有许多其他因素在这里发挥作用。当您启动生产者发送消息时,根据代理的状态,可能会有许多资源在代理上分配以创建队列,以及各种其他管理对象,这些对象将保留在内存中以便于消息路由等。分析内存使用情况并检查泄漏,你应该使用像Yourkit等工具。