【问题标题】:activeMQ fileQueueCursor (heap size)activeMQ 文件队列游标(堆大小)
【发布时间】:2015-07-01 16:02:18
【问题描述】:

我使用 AcviteMq v 5.9.1 和非持久消息。我的问题是

OutOfMemory:堆大小

我知道此网站上存在此类问题,但我找不到我的具体问题。我知道非持久性消息存储在内存中,所以我收到了这个错误。我也知道我可以增加 Xms/Xmx,但这并不能解决问题(当我收到更多消息时,我可能也会收到此错误)。

http://activemq.apache.org/message-cursors.html

我在 activeMq 网站上读到有 3 个游标,并且 fileQueueCurosr 将存储的消息写入文件。我为这个光标设置了我的配置,但它也不起作用。

 <policyEntry queue="foo.bar.>">
    <pendingQueuePolicy>
        <fileQueueCursor />
    </pendingQueuePolicy>
  </policyEntry>

也许,有人有类似的问题,可以帮助我吗?或者这个光标可能不够,我必须设置其他东西?

-Xmx 和 Xmx 默认设置为 1GB/1GB。

////更新 23.04.15@kartik 回答后

<policyEntry queue="foo.bar.>" memoryLimit="10mb" (or 30mb) producerFlowControl="false">
        <pendingQueuePolicy>
            <fileQueueCursor />
        </pendingQueuePolicy>
      </policyEntry>

【问题讨论】:

    标签: java memory-leaks activemq heap-memory heap-corruption


    【解决方案1】:
    1. 使用 fileQueueCursor 和 memoryLimit 代理可以使用。例如,在以下情况下,总代理可以使用 1.5 GB 的可用 RAM。 " memoryLimit="1500mb" producerFlowControl="false" >

    2. 设置内存使用百分比。之后,代理会将消息推送到 KahaDB tmp 文件中。

    【讨论】:

    • 我将我的 Xmx/Xmx 减少到 20M/20M,因为我不想等待太久“堆大小”错误。所以我添加了这个 => memoryLimit="10mb"(或者你提到的 30,但它不会改变任何东西)producerFlowControl="false"。此外,我有 memoryUsage="70"。我注意到当内存使用量低于 70 时,一切正常。当涉及到 70(我猜更高)时,我每次都会收到堆大小错误。我想知道当内存超过 70% 时是否可以将消息写入 tmp 文件?我猜 fileQueueCursor 应该是这样工作的,但事实并非如此。
    • 你的队列名称是什么,它应该总是以 foo.bar 开头,或者如果你想申请所有队列放通配符>。
    • 我的队列是 foo.bar(用于测试),但我用 '>' 检查并且是相同的。
    • 通过更高的 prefech 让你的消费者更快,但它会增加客户端的内存需求。为生产者/消费者端的所有选项尝试 async true 。尝试使用 message.ack 的 client_acknowledge 是否工作得更好,或者使用优化确认自动确认。
    • 这个配置解决了问题,我发现问题不是 AMQ 而是其他问题。谢谢帮助。
    猜你喜欢
    • 2012-03-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-15
    • 2018-06-14
    • 1970-01-01
    • 2018-12-23
    • 2021-03-08
    • 2013-03-01
    相关资源
    最近更新 更多