activemq-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Rob Davies <rajdav...@gmail.com>
Subject Re: Blocking on UsageManager.waitForSpace again
Date Sat, 17 Feb 2007 18:07:49 GMT
thank you!!

On 17 Feb 2007, at 17:33, tvijlbrief wrote:

>
> 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