Sorry for the delay getting back to you.

I'm not clear what delay error messages you're referring to; if you're
still having problems related to them, can you include a sample to help
clarify what you mean?

I got the 70GB by multiplying your 70% JVM percentage by your 100GB store
limit instead of your JVM heap size, which of course doesn't make any
sense.  Sorry for the confusion.
On Dec 9, 2014 8:40 PM, "brian" <brian.a...@conceptual.ca> wrote:

On 14-12-08 08:57 PM, Tim Bain wrote:

> The log line tells you how you're doing against two different limits: the
> per-destination limit and the entire-broker limit.  The per-destination
> limit is first, and the log line says you're using 0% of what you've
> allocated per destination, so you're right that you're fine there.  The
> full-broker limit is second, and the log line says you're using 104% of the
> available memory, which is why you're getting flow controlled: although the
> individual destination is empty, the broker as a whole is full, and this
> one message just happens to be the straw that breaks the camel's back.  So
> figure out what other destination has lots of messages (or large messages)
> to be using 70GB(!) of memory...
>


Thanks for the response. I've spent some time digging into it further and
your remarks helped to clarify some things. The following links helped a
bunch, also:

http://www.christianposta.com/blog/?p=273
http://open-source-adventures.blogspot.ca/2009/01/limiting-
disk-store-usage-with-active.html (contains some deprecated info)
https://access.redhat.com/documentation/en-US/Fuse_
Message_Broker/5.4/html/Using_Persistent_Messages/files/
FuseMBPersistIntro.html

I've since adjusted my config in the following way:

<persistenceAdapter>
  <kahaDB
    directory="${activemq.data}/kahadb"
    journalMaxFileLength="100mb"
    enableJournalDiskSyncs="true"
    checksumJournalFiles="true"
    checkForCorruptJournalFiles="true"
    indexCacheSize="10000"
    cleanupInterval="30000"
    checkpointInterval="5000"
  />
</persistenceAdapter>


<systemUsage>
  <systemUsage>
    <memoryUsage>
      <memoryUsage percentOfJvmHeap="70" />
    </memoryUsage>
    <storeUsage>
      <storeUsage limit="50 gb" />

    </storeUsage>
    <tempUsage>
      <tempUsage limit="50 gb"/>
    </tempUsage>
  </systemUsage>
</systemUsage>


I'd noticed that the log messages mentioned the delay time in increasing
intervals of 30 seconds. Could this be related to cleanupInterval?

I should point out that these message numbers are an infrequent event with
this application. The norm is to pass significantly fewer messages at a
time. With the above changes, i've run this maximal sync several times
without further trouble, save for the last run, in which a single message
refused to leave the queue, and without any suggestion in the log that AMQ
was flow controlling the consumer. I'll keep playing with it.

And did you mean ~700MB? That's much closer to what i'm seeing of the
actual data being sent over the wire.

Reply via email to