我正在使用ActiveMQ 5.8.0,设置为使用KahaDB保留消息。我使用大量的内存来进行相当简单的操作时遇到ActiveMQ问题。
我已将包装器堆空间(Xmx)设置为1536m,并将代理系统内存设置为1024m。启动ActiveMQ后,它使用大约100MB的大量内存。然后,当我打开ActiveMQ控制台,并尝试访问包含700条消息的错误队列时,奇怪的事情开始发生。内存使用率上升。而且。而且。直到它停在大约1,5GB,但它仍然没有显示队列。然后它会在那里停留几分钟,直到它因为java堆空间的错误而失败(至少它的xmx内存有点低,现在只需等待几分钟)。消息很小,没有有效负载,只有几个用户定义的头部属性。这些消息中有700条不能占用1400MB的内存。
我也可以访问另一个ActiveMQ实例。这是5.7.0,设置为使用MSSQL数据库进行持久化。在这里,我可以打开一个包含50000个待处理消息的队列,在大约10秒内在webconsole中显示3000个消息。
当我尝试连接HawtIO而不是ActiveMQ控制台时,我没有看到内存使用的疯狂增长,尽管仍然排队内容的查看速度很慢,而且有些队列(有1000个更大的消息)我无法查看内容。实际上,当在不同环境(dev / test)中进行更多检查时,我发现在开发环境中没有显示内容的错误队列(包含1200条消息)将显示在测试环境中(带有1900条消息) )。这毫无意义..
有谁知道什么可能导致ActiveMQ 5.8.0的Web控制台通过所有内存吃掉?为什么即使使用HawtIO,我也看不到相对较小队列的内容?我认为这是ActiveMQ的一些核心功能,在这一点上我非常震惊,这实际上有多么糟糕。