通过屋顶ActiveMQ内存消耗(页面文件)......怎么办?

时间:2010-11-29 18:29:44

标签: java memory memory-leaks windows-server-2003 activemq

我们使用的是旧版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)

3 个答案:

答案 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,则不应该发生 - 但是启用流量控制 - 它会有所帮助;)