In one of our deployments Synapse becomes really slow. Here is a thread dump of the blocking threads. Here I can see that the thread is waiting on SharedOutputBuffer.flushContent method.
First it checks weather SharedOutputBuffer has data in the write method of SharedOutputBuffer. If the buffer doesn't have data it calls the flushContent method. But in the flushContent method it again check weather buffer has data in the hasData method. If it has data it wait. But since it has already checked weather data is available in the write method flushContent hasData should return false. Does this mean after we have seen buffer doesn't have data somebody has produced data? Thanks, Supun.. "HttpClientWorker-8" prio=10 tid=0x08710c00 nid=0x5c04 in Object.wait() [0x5ed25000] java.lang.Thread.State: WAITING (on object monitor) at java.lang.Object.wait(Native Method) at java.lang.Object.wait(Object.java:485) at org.apache.http.nio.util.SharedOutputBuffer.flushContent(SharedOutputBuffer.java:191) - locked <0xf17c13e0> (a java.lang.Object) at org.apache.http.nio.util.SharedOutputBuffer.write(SharedOutputBuffer.java:148) - locked <0xf17c13e0> (a java.lang.Object) at org.apache.http.nio.entity.ContentOutputStream.write(ContentOutputStream.java:63) at javax.activation.DataHandler.writeTo(DataHandler.java:309) at org.wso2.relay.ExpandingMessageFormatter.findAndWrite2OutputStream(ExpandingMessageFormatter.java:87) at org.wso2.relay.ExpandingMessageFormatter.writeTo(ExpandingMessageFormatter.java:56) at org.apache.synapse.transport.nhttp.HttpCoreNIOSender.sendAsyncResponse(HttpCoreNIOSender.java:476) at org.apache.synapse.transport.nhttp.HttpCoreNIOSender.invoke(HttpCoreNIOSender.java:293) at org.apache.axis2.engine.AxisEngine.send(AxisEngine.java:440) at org.apache.synapse.core.axis2.Axis2Sender.sendBack(Axis2Sender.java:138) at org.apache.synapse.core.axis2.Axis2SynapseEnvironment.send(Axis2SynapseEnvironment.java:179) at org.apache.synapse.mediators.builtin.SendMediator.mediate(SendMediator.java:72) at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:60) at org.apache.synapse.mediators.filters.OutMediator.mediate(OutMediator.java:55) at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:60) at org.apache.synapse.mediators.base.SequenceMediator.mediate(SequenceMediator.java:115) at org.apache.synapse.core.axis2.Axis2SynapseEnvironment.injectMessage(Axis2SynapseEnvironment.java:131) at org.apache.synapse.core.axis2.SynapseCallbackReceiver.handleMessage(SynapseCallbackReceiver.java:339) at org.apache.synapse.core.axis2.SynapseCallbackReceiver.receive(SynapseCallbackReceiver.java:135) at org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:178) at org.apache.synapse.transport.nhttp.ClientWorker.run(ClientWorker.java:241) at org.apache.axis2.transport.base.threads.NativeWorkerPool$1.run(NativeWorkerPool.java:58) at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) at java.lang.Thread.run(Thread.java:619) -- Software Engineer, WSO2 Inc http://wso2.org supunk.blogspot.com
