Thanks for the suggestion.  I tried it and it made no difference.  I also
found that the memory usage on the client goes up a lot when using
transactions with many messages (I guess because it has to store the whole
transaction on the client in-case it needs to failover which potentially
causes me another problem).

I found this setting though "soTimeout" - which can be set for the socket
timeout and defaults to 0.  So I changed this to 10000 (10 secs) and
everything now behaves a lot better.





bsnyder wrote:
> 
> On Thu, Jan 8, 2009 at 8:51 AM, IBeaumont <ibeaum...@categoric.com> wrote:
>>
>> I'm running ActiveMQ on another machine and connecting via TCP.  If it
>> dies
>> (I press CTRL-C, or may get an out of memory error) while I'm processing
>> messages then the consume gets stuck waiting for a message and never
>> returns
>> (I'm calling receiveNoWait).  This is the stack trace where it is stuck
>> in
>> jconsole...
>>
>> Name: WorkerThread for PIQ Server manager 39
>> State: WAITING on java.lang.obj...@47eb38
>> Total blocked: 0  Total waited: 43
>>
>> Stack trace:
>> java.lang.Object.wait(Native Method)
>> java.lang.Object.wait(Object.java:485)
>> org.apache.activemq.MessageDispatchChannel.dequeue(MessageDispatchChannel.java:75)
>> org.apache.activemq.ActiveMQMessageConsumer.dequeue(ActiveMQMessageConsumer.java:412)
>> org.apache.activemq.ActiveMQMessageConsumer.receiveNoWait(ActiveMQMessageConsumer.java:560)
>> ….
>>
>>
>> At the same time I may see another ActiveMQ thread waiting (and not sure
>> if
>> this is related or the cause)...
>>
>> Name: ActiveMQ Connection Worker: tcp://2000-serve-base/192.168.1.9:61616
>> State: WAITING on
>> java.util.concurrent.locks.abstractqueuedsynchronizer$conditionobj...@16372aa
>> Total blocked: 0  Total waited: 3
>>
>> Stack trace:
>> sun.misc.Unsafe.park(Native Method)
>> java.util.concurrent.locks.LockSupport.park(LockSupport.java:158)
>> java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1925)
>> java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:358)
>> java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:946)
>> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:906)
>> java.lang.Thread.run(Thread.java:619)
>>
>>
>> This causes me 2 problems -
>> 1. The client application can't cleanly shutdown as it is waiting for my
>> consumer thread to finish.
>> 2. If ActiveMQ restarts my client doesn't automatically reconnect becasue
>> the consumer thread is still stuck.
>>
>> Any ideas?
>>
>> Ian
>> This means that when active MQ is restarted my client cannot
>> automatically
> 
> Are your clients using the failover transport to connect to the broker?
> 
> http://activemq.apache.org/failover-transport-reference.html
> 
> The failover transport provides automatic reconnection for clients
> when a broker cycles.
> 
> Bruce
> -- 
> perl -e 'print
> unpack("u30","D0G)u8...@4vyy9&5R\"F)R=6-E+G-N>61E<D\!G;6%I;\"YC;VT*"
> );'
> 
> Apache ActiveMQ - http://activemq.org/
> Apache Camel - http://activemq.org/camel/
> Apache ServiceMix - http://servicemix.org/
> 
> Blog: http://bruceblog.org/
> 
> 

-- 
View this message in context: 
http://www.nabble.com/Client-threads-hang-if-ActiveMQ-dies-tp21354487p21357557.html
Sent from the ActiveMQ - User mailing list archive at Nabble.com.

Reply via email to