You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@activemq.apache.org by chschroe <cs...@deriva.de> on 2015/11/05 07:41:26 UTC

Broker OOM

Hi list,
We have recently upgraded the ActiveMQ broker on one of our test servers
from version 5.9 to 5.12.1. After the upgrade, we get lots of
OutOfMemoryErrors from the broker and the broker becomes unusable.

We increased the JVM memory from 128 MB (which is sufficient on the 5.9
production server) to 256 MB, but that did not help. We then changed the
pending queue policy to "fileQueueCursor" and the pending (durable)
subscriber policy to "fileCursor" and "fileDurableSubscriberCursor",
respectively, to let the messages be written to disk instead of kept in
memory. This seemed to improve stability, but after a while the OOM errors
returned.

Since we saw lots of messages in the DLQ (which were never retrieved from
there), we disabled the DLQ by these configuration lines:
	<deadLetterStrategy>
		<discarding/>
	</deadLetterStrategy>
	
We also tried to reduce the memory usage using the following lines:
	<memoryUsage>
		<memoryUsage percentOfJvmHeap="..."/>
	</memoryUsage>
We tried different settings for the "percentOfJvmHeap", but did not see any
effect.

In our setup, we have a pretty fast producer and a slow consumer, so it is
quite clear that messages pile up in the broker. However, the messages are
small, and when I checked the queues and topics using a JMX connection, the
total memory consumption is far below the assigned JVM memory.

Maybe I totally misunderstood how the broker works: I always thought that
the broker receives messages from the producers and stores them (either in
memory or on disk). The broker should decouple the consumers from the
producers and deliver the messages to the consumers at whatever speed they
can handle them. This would explain why the broker needs some storage space,
but this should be on disk, so why does it need all the memory?

Another observation that might be related: The producer seems to be slowed
down by the broker, so throttling seems to occur. This is contradictory to
my assumption how the broker works, but on the other hand emphasizes that
messages pile up in the broker. In the producer, we use
"setAlwaysSyncSend(true)" because we need to avoid that messages are lost
(see
http://tmielke.blogspot.de/2011/11/loosing-messages-despite-of-sending.html).
This may be a cause for the problem, but I do not see an alternative
solution.

Can you give me some hints how we can change our configuration (or
architecture?) to avoid the OOM errors? Thanks a lot in advance.

Regards,
Christian



--
View this message in context: http://activemq.2283324.n4.nabble.com/Broker-OOM-tp4703695.html
Sent from the ActiveMQ - User mailing list archive at Nabble.com.