我们使用的是旧版ActiveMQ(5.3.2)(参见:Is activemq reliable?)
我们已经删除了持久性,因为我们需要更快的速度。我们的工作人员可以跟上消息,但是,即使队列通常处于0暂挂状态,在处理了大约45000条消息(消息通常为100个字符长)之后,页面文件仍为8GB!它并不止于此,它一直持续到15 GB(我们的服务器有16GB内存)!
停止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)
答案 0 :(得分:1)
如果即使停止ActiveMQ后内存仍未释放,我很想说它是JDK中的一个错误。您是否考虑过降级为更稳定的版本?还尝试使用32位JDK运行它,看看是否可以用较小的最大内存设置重现问题。
答案 1 :(得分:1)
我没有在Windows 7机器上遇到任何问题,使用ActiveMQ 5.3.0,jdk1.6.0_18(64位)和使用PHP进行测试设置。使用一些测试脚本,我在585秒内向队列写入了10.000.000条消息。这大约是每秒17000条消息。一切都在同一台机器(我的笔记本电脑,4 GB内存,Intel i3 CPU)上运行,并使用TCP套接字连接到队列。
答案 2 :(得分:1)
您可以发布完整的ActiveMQ配置吗?您是否在ActiveMQ代理上设置了persistent = false?我认为发生的事情是因为你关闭了流量控制,并且只允许代理使用20mb的内存 - 你的消息被临时存储分页到磁盘。如果persistent = false,则不应该发生 - 但是启用流量控制 - 它会有所帮助;)