Hi All
I would appreciate some insight as to whether or not we have a
performance/configuration issue with ActiveMQ. We've been using ActiveMQ
with Kaha and an embedded broker to queue email messages for archiving
purposes. All consumers and producers are on the same machine (we're
using the VM transport). Functionally, ActiveMQ is doing its job, albeit
it doesn't seem to be exploiting the full potential of the consumer
threads. When I examine ActiveMQ threads in Yourkit, I see that one
particular consumer thread is in a constant waiting state, despite the
fact that there are a large number of messages waiting in the queue. See
below stack. In addition, when I examine the threads in Yourkit,
ActiveMQ code seems to do alot waiting around, despite the fact that
there are several thousand messages in the queue, and there are idle
consumer threads available. In short, I struggling to figure out why the
consumer threads aren't always busy.
Stacks at 10:16:12 AM (uptime 16h 15m 42s)
receive [WAITING] CPU time: 49s
sun.misc.Unsafe.park(boolean, long)
java.util.concurrent.locks.LockSupport.park(Object)
java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await()
java.util.concurrent.ArrayBlockingQueue.take()
org.apache.activemq.transport.FutureResponse.getResult()
org.apache.activemq.transport.ResponseCorrelator.request(Object)
org.apache.activemq.ActiveMQConnection.syncSendPacket(Command)
org.apache.activemq.ActiveMQSession.syncSendPacket(Command)
org.apache.activemq.ActiveMQMessageConsumer.<init>(ActiveMQSession,
ConsumerId, ActiveMQDestination, String, String, int, int, boolean,
boolean, boolean, MessageListener)
org.apache.activemq.ActiveMQSession.createConsumer(Destination, String,
boolean, MessageListener)
org.apache.activemq.ActiveMQSession.createConsumer(Destination, String,
boolean)
org.apache.activemq.ActiveMQSession.createConsumer(Destination, String)
org.apache.activemq.ActiveMQSession.createConsumer(Destination)
com.stimulus.archiva.queue.FileQueue$ConsumerTask$1.use(Session)
com.stimulus.archiva.queue.FileQueue$SessionTask.call()
com.stimulus.archiva.queue.FileQueue$ConsumerTask.call()
com.stimulus.archiva.queue.FileQueue$ProcessDLQConsumer.run()
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor$Worker)
java.util.concurrent.ThreadPoolExecutor$Worker.run()
java.lang.Thread.run()
Thank you in advance for your ideas/suggestions.
Jamie