activemq-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From tvijlbrief <tom...@xs4all.nl>
Subject Re: Blocking on UsageManager.waitForSpace again
Date Sat, 17 Feb 2007 17:33:47 GMT

I created a junit test which hangs after about 50 iterations.

Note that the behaviour is not compatible with two standalone programs and a
tcp-broker. 
In that case the producer can still send but the consumer blocks...

The unit test is attached to:

https://issues.apache.org/activemq/browse/AMQ-1136

Hope this helps.

Tom


rajdavies wrote:
> 
> Hi Albert,
> 
> it would be great if you could produce a junit test case and attach  
> it to an issue in our issue tracker - http://issues.apache.org/ 
> activemq/secure/CreateIssue!default.jspa
> these are just the sort of cases we look for for testing n' fixing  
> stuff!
> 
> cheers,
> 
> Rob
> On 21 Jan 2007, at 15:32, Albert Strasheim wrote:
> 
>> Hello all
>>
>> On Thu, 18 Jan 2007, James.Strachan wrote:
>>
>>> Have you tried setting the UsageManager configuration to something  
>>> large? Out
>>> of the box its set to something really tiny.
>>>
>>> BTW if you have an issue, please mention the version of the  
>>> software you are
>>> using.
>>> http://incubator.apache.org/activemq/support.html
>>> James
>>
>> Some more details from the day's debugging.
>>
>> We're running ActiveMQ 4.2 from trunk as checked out on Friday.
>>
>> Our test has a thread that produces messages. On another connection in
>> the same application, we have a consumer with a message listener set.
>> This listener produces a new message.
>>
>> Debugging with Eclipse, I see that the first time the code goes into
>> UsageManager.waitForSpace, it is calling from the thread that  
>> produces.
>> The stack looks like this:
>>
>> Thread [myapp$MyThread] (Suspended (breakpoint at line 91 in  
>> UsageManager))	
>> 	UsageManager.waitForSpace() line: 91	
>> 	UsageManager.waitForSpace() line: 88	
>> 	Topic.send(ConnectionContext, Message) line: 248	
>> 	ManagedTopicRegion(AbstractRegion).send(ConnectionContext,  
>> Message) line: 305	
>> 	ManagedRegionBroker(RegionBroker).send(ConnectionContext, Message)  
>> line: 381	
>> 	TransactionBroker.send(ConnectionContext, Message) line: 197	
>> 	AdvisoryBroker(BrokerFilter).send(ConnectionContext, Message)  
>> line: 126	
>> 	CompositeDestinationBroker.send(ConnectionContext, Message) line: 98	
>> 	BrokerService$2(MutableBrokerFilter).send(ConnectionContext,  
>> Message) line: 136	
>> 	TransportConnection.processMessage(Message) line: 449	
>> 	ActiveMQBytesMessage(ActiveMQMessage).visit(CommandVisitor) line:  
>> 604	
>> 	TransportConnection.service(Command) line: 258	
>> 	TransportConnection$1.onCommand(Object) line: 164	
>> 	ResponseCorrelator.onCommand(Object) line: 95	
>> 	MutexTransport(TransportFilter).onCommand(Object) line: 65	
>> 	VMTransportServer$1(VMTransport).syncOneWay(Object) line: 99	
>> 	VMTransportServer$1(VMTransport).oneway(Object) line: 86	
>> 	MutexTransport.oneway(Object) line: 44	
>> 	ResponseCorrelator.asyncRequest(Object, ResponseCallback) line: 69	
>> 	ResponseCorrelator.request(Object) line: 74	
>> 	ActiveMQConnection.syncSendPacket(Command) line: 1185	
>> 	ActiveMQSession.send(ActiveMQMessageProducer, ActiveMQDestination,  
>> Message, int, int, long) line: 1547	
>> 	ActiveMQMessageProducer.send(Destination, Message, int, int, long)  
>> line: 473	
>> 	ActiveMQMessageProducer.send(Message) line: 358	
>>         <thread in my application calling send>
>>
>> If I then allow the VM to continue, it runs for a short while and then
>> the single remaining ActiveMQ Session Task thread blocks:
>>
>> Thread [ActiveMQ Session Task] (Suspended (breakpoint at line 91 in  
>> UsageManager))	
>> 	UsageManager.waitForSpace() line: 91	
>> 	UsageManager.waitForSpace() line: 88	
>> 	Topic.send(ConnectionContext, Message) line: 248	
>> 	ManagedTopicRegion(AbstractRegion).send(ConnectionContext,  
>> Message) line: 305	
>> 	ManagedRegionBroker(RegionBroker).send(ConnectionContext, Message)  
>> line: 381	
>> 	TransactionBroker.send(ConnectionContext, Message) line: 197	
>> 	AdvisoryBroker(BrokerFilter).send(ConnectionContext, Message)  
>> line: 126	
>> 	CompositeDestinationBroker.send(ConnectionContext, Message) line: 98	
>> 	BrokerService$2(MutableBrokerFilter).send(ConnectionContext,  
>> Message) line: 136	
>> 	TransportConnection.processMessage(Message) line: 449	
>> 	ActiveMQBytesMessage(ActiveMQMessage).visit(CommandVisitor) line:  
>> 604	
>> 	TransportConnection.service(Command) line: 258	
>> 	TransportConnection$1.onCommand(Object) line: 164	
>> 	ResponseCorrelator.onCommand(Object) line: 95	
>> 	MutexTransport(TransportFilter).onCommand(Object) line: 65	
>> 	VMTransportServer$1(VMTransport).syncOneWay(Object) line: 99	
>> 	VMTransportServer$1(VMTransport).oneway(Object) line: 86	
>> 	MutexTransport.oneway(Object) line: 44	
>> 	ResponseCorrelator.asyncRequest(Object, ResponseCallback) line: 69	
>> 	ResponseCorrelator.request(Object) line: 74	
>> 	ActiveMQConnection.syncSendPacket(Command) line: 1185	
>> 	ActiveMQSession.send(ActiveMQMessageProducer, ActiveMQDestination,  
>> Message, int, int, long) line: 1547	
>> 	ActiveMQMessageProducer.send(Destination, Message, int, int, long)  
>> line: 473	
>> 	ActiveMQMessageProducer.send(Message) line: 358	
>> 	
>> 	<onMessage of listener in my application is called. it calls send.>
>> 	
>> 	ActiveMQMessageConsumer.dispatch(MessageDispatch) line: 870	
>> 	ActiveMQSessionExecutor.dispatch(MessageDispatch) line: 99	
>> 	ActiveMQSessionExecutor.iterate() line: 166	
>> 	PooledTaskRunner.runTask() line: 111	
>> 	PooledTaskRunner.access$1(PooledTaskRunner) line: 95	
>> 	PooledTaskRunner$1.run() line: 44	
>> 	ThreadPoolExecutor$Worker.runTask(Runnable) line: 885	
>> 	ThreadPoolExecutor$Worker.run() line: 907	
>> 	Thread.run() line: 619	
>>
>> There doesn't seem to be any other ActiveMQ threads around, so I can't
>> see how this thread is going to wake up from its
>>
>> usageMutex.wait();
>>
>> that is blocking on.
>>
>> Any thoughts? Is it wrong to produce straight from a message listener?
>>
>> By the way, I noticed that increasing the memory available to the
>> memory manager from 20 MB to 128 MB actually makes the application  
>> block
>> sooner rather than later. I also experimented with some prefetch  
>> policy
>> settings, but these don't make much of a difference. Currently, we're
>> simply using
>>
>> vm://localhost?broker.useJmx=true&broker.persistent=false
>>
>> as our broker URL.
>>
>> We're using topics throughout. Sessions' acknowledge modes are all set
>> to DUPS_OK_ACKNOWLEDGE. We're doing some message selection with string
>> and integer properties.
>>
>> Cheers,
>>
>> Albert
> 
> 
> 

-- 
View this message in context: http://www.nabble.com/Blocking-on-UsageManager.waitForSpace-again-tf3031460s2354.html#a9021999
Sent from the ActiveMQ - User mailing list archive at Nabble.com.


Mime
View raw message