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.

Reply via email to