I think this is a multi thread sync bug of ActiveMQConnection, for example: ExceptionListener exceptionListener = new ExceptionListener() { public onException(JMSException exception){ conn.close; } };
Thread main : time 1. create a connection successfully; time 2. connection.setExceptionListener(exceptionListener); time 3. activemq server shutdown; time 4. send a message, learn activemq down state; Thread onAsyncException()'s new Runnable -- ActiveMQ Connection Executor: unconnected : time 5. ActiveMQConnection.close(); time 6. throws javax.jms.JMSException on ActiveMQConnection.doSyncSendPacket(); Thread onException()'s new Runnable -- ActiveMQ Connection Executor: unconnected : time 7. do nothing because of (!closing.get() && !closed.get()) == false; So, ServiceSupport.dispose(this.transport) wouldn't be inoked, FailoverTransport.reconnectTask wouldn't be shutdown; ActiveMQ Task wakeup for ever, and doReconnect() returned at ((connectedTransport.get() != null && !doRebalance) || disposed || connectionFailure != null), and high cpu usage; -- View this message in context: http://activemq.2283324.n4.nabble.com/activemq5-5-client-high-cpu-usage-tp4675314p4675349.html Sent from the ActiveMQ - User mailing list archive at Nabble.com.