Hi,

 

A couple of times I’ve experienced deadlocks with ServiceMix due to bounded queues becoming full. The most recent case was today, using ST flow. It’s easy to see how ST flow might be susceptible to this, but I believe I’ve had it with SEDA also. (Perhaps with a different queue/cause.)

 

In the case today I diagnosed it by examining the stack traces of threads using JMX (jconsole) after ServiceMix had hung. I found that seven threads are BLOCKED on synchronized (putGuard_) in BoundedLinkedQueue#put(), while one thread is stuck inside the method waiting for reconcilePutPermits() to return true.

 

My test case involves a FTPPoller receiving 1,100 files, passing them through to a XLST routing component, which passes them on to an HTTPInvoker component. (Actually both the FTPPoller and HTTPInvoker are local customizations and I’m using a couple of customized marshallers too.) I realise 1,100 files is quite a lot to receive at once via FTP. However, I increased the default capacity of BoundedLinkedQueue (from 1,024 to 10,240, as an experiment) and things seemed to work OK. I don’t really expect to have 1,100 files at once in real life, but in our scenario we will receive a couple hundred at once sometimes, so I thought this was a good test.

 

Should I raise a JIRA for this, or am I doing something stupid?

 

I have saved the stack traces.

 

BTW I’m using ServiceMix 2.0, built from source.

 

John Hurst

Wellington, New Zealand

 


______________________________________________________________________
This email has been scanned by the MessageLabs Email Security System.
For more information please visit http://www.messagelabs.com/email
______________________________________________________________________

Reply via email to