Hi,
we are using qpid (v0.16) successfully since quite some time as part of our 
infrastructure.Another part of our infrastructure is a monitoring service which 
periodically connects to the broker on the qmqp port (plain tcp connection) and 
closes the connection immediately after connecting. It does that in order to 
make sure the service is up and running.
After running this monitoring service a while we receive OOMs (saying that the 
JVM ran out of threads).Uncaught exception, shutting down. 
java.lang.OutOfMemoryError: unable to create new native thread     at 
java.lang.Thread.start0(Native Method)     at 
java.lang.Thread.start(Thread.java:597)     at 
org.apache.qpid.transport.network.io.IoSender.initiate(IoSender.java:97)     at 
org.apache.qpid.transport.network.io.IoNetworkConnection.start(IoNetworkConnection.java:58)
     at 
org.apache.qpid.transport.network.io.IoNetworkTransport$AcceptingThread.run(IoNetworkTransport.java:225)

Turns out this monitoring service doesn't follow the amq protocol which creates 
a thread leak in the broker (IOSender threads keep lingering around).
I'm aware that this client doesn't behave according to the amq protocol but the 
other side of the story is that a misbehaving client (reliably and quickly is 
able to bring down the service). I noticed other queueing products have the 
same issue.So my question is: Is there a reason the broker doesn't detect 
closed client connections and guards itself from a DoS?
Out of curiosity: What do other people use to check the availibility of the 
service? We fell back to pinging the JMX port for now but are open to other 
solutions.


Cheers,      Marco                                        

Reply via email to