git.net

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

ActiveMQ: producer flow control and temp store


Dear community,

We want to enable producer flow control to protect a broker from running out
of memory if slow topic consumers appear (we had OOMs through several runs
on our staging environment, and so far PFC off is one of the versions why
this has happened). However, we would want to keep our previous approach: if
memory not enough, use temp store for our topic messages so that the
producer keeps producing and fast consumers are up-to-date. So we expect
(almost) no backpressure if ActiveMQ has enough CPU and IO to write those
messages to disk.

I can see that simply enabling producer flow control keeps utilizing temp
store:


<destinationPolicy>
  <policyMap>
    <policyEntries>
      <policyEntry topic=">" producerFlowControl="true">


<systemUsage>
  <systemUsage>
    <memoryUsage>
      <memoryUsage limit="2 gb"/>
    </memoryUsage>
    <storeUsage>
      <storeUsage limit="100 gb"/>
    </storeUsage>
    <tempUsage>
      <tempUsage limit="10 gb"/>
    </tempUsage>
  </systemUsage>
</systemUsage>


However, our concerns are that single case of slow consumer can flood most
of the available heap with messages before flowing to temp store. The
following might seem as a perfect solution:
*<policyEntry topic=">" producerFlowControl="true" memoryLimit="20 mb">*

However, with this configuration ActiveMQ start throttling producers as soon
as topic memory limit reached, without going to temp store.

Any chance there's some trick to limit memory per destination, and at the
same time keep using temp store?

Thank you,
Art



--
Sent from: http://activemq.2283324.n4.nabble.com/ActiveMQ-User-f2341805.html