I'm experiencing an issue with ActiveMQ 5.3.1 broker.  Here's my setup:

- 1 queue that experiences heavy usage (the only relevant destination in
this case)
- 80 concurrentConsumers on the queue
- consumer.prefetchSize not set (default = 1000, I believe)

Occasionally my service sees a spike in traffic, and the queue may
experience a backlog of tens of thousands of messages (which is obviously
undesirable, but it's ok).  As traffic subsides, the consumers are able to
catch up with the backlog and all is well.

BUT...here's the problem...

When the # of messages (N) in the queue rises, there comes a point where the
broker CPU spikes to 100%.

if N >= (concurrentConsumers * prefetchSize) {
   cpu spikes;
}

In my case, 80,000 messages is the magic number where the CPU sikes.  And
the math adds up: 80 concurrent consumers * 1000 prefetch size.  You can
literally watch the CPU spike and stay spiked if N >= 80,000.  And when N
drops back down < 80,000, you can see the CPU come back down to nominal
values.  Predictable & reliable.  But I'm never happy seeing 100% CPU or
high load on my servers!  :-)

1. What is ActiveMQ doing to cause the CPU spike?

2. Is this expected or is it a bug?

3. I'm obviously tempted to crank consumer.prefetchSize way up to avoid
this, but what other problem(s) might I cause as a result?

4. I realize this is an amorphous question, but here goes anyway...which is
worse: cranking up prefetchSize, or adding more consumers?

Attached are thread dumps both in normal conditions (CPU nominal) and in the
CPU spiked condition.
http://old.nabble.com/file/p28133368/thread-dump-normal.log
thread-dump-normal.log 
http://old.nabble.com/file/p28133368/thread-dump-cpu-spiked.log
thread-dump-cpu-spiked.log 

Please let me know if you need any more detail or config.

Thanks!
Dan
-- 
View this message in context: 
http://old.nabble.com/100--CPU-spike-with-ActiveMQ-5.3.1-tp28133368p28133368.html
Sent from the ActiveMQ - User mailing list archive at Nabble.com.

Reply via email to