我们使用的是旧版本的 ActiveMQ (5.3.2)(请参阅:Is activemq reliable?)
我们删除了持久性,因为我们需要更快的速度。我们的工作人员可以跟上消息,但是,即使队列通常处于 0 待处理状态,在处理大约 45000 条消息后(消息通常为 100 个字符长),页面文件为 8GB!但它并没有就此停止,它会一直持续到达到 15 GB(我们的服务器有 16 GB 内存)!
停止 ActiveMQ 进程不会清理此页面文件,它会无限期地保持这么大。
这些是我们使用的设置:
<policyEntry queue=">" producerFlowControl="false" memoryLimit="2gb">
</policyEntry>
和
<systemUsage>
<systemUsage>
<memoryUsage>
<memoryUsage limit="20 mb"/>
</memoryUsage>
<storeUsage>
<storeUsage limit="1 gb"/>
</storeUsage>
<tempUsage>
<tempUsage limit="100 mb"/>
</tempUsage>
</systemUsage>
</systemUsage>
我们需要做什么才能将内存使用量保持在“正常”水平?
我们的服务器:Windows 2003(64位)。 ActivemQ (5.3.2),带 Java64 位 (1.6.0__22)
最佳答案
如果即使停止 ActiveMQ 后内存也没有被释放,我很想说这是 JDK 中的一个错误。您是否考虑过降级到更稳定的版本?还可以尝试使用 32 位 JDK 运行此程序,看看是否可以使用较小的最大内存设置重现该问题。
关于java - ActiveMQ 内存消耗通过屋顶(页面文件)...该怎么办?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4306804/