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



Reply via email to