I've read the other threads in this forum concerning performance problems of JBossMQ, and I have a similar problem.
In short, the JBossMQ cannot handle very high loads, even over a short period of time. I think the root problem of this is that JBossMQ gives the sender a larger share of the throughput than a receiver when both are attached. This leads to a backlog of messages that build up quickly and end up causing JBossMQ to become unresponsive. In addition, when this happens, JBossMQ stops delivering messages even when the sending load stops.
We are trying to benchmark JBossMQ vs. IBM Websphere MQ for our application, which involves high messaging loads at peak time. Our application will have approximately 3MB/sec at peak. We want to stress test these providers to see how many of our large messages it can handle in a second.
The test driver consists of two standalone JMS clients that connect to JBoss' JNDI to lookup a single queue. Then, a constant stream of messages flows from the sender to the receiver over the single queue. We want to see the max stream throughput.
The JBoss JVM is set to have 1GB of memory and the MessageCache is set to 800 high, 900 max.
JBoss cannot handle this high load for even about a minute. IBM Websphere MQ can handle this for over 30 minutes.
The problem is that the sender sends at a rate of about 4MB/second, but JBoss only delivers the messages to the receiver at about 1-1.5MB/second, causing a very quick and large backlog. This differential in throughput eats up the memory and starts thrashing to disk. JBossMQ becomes completely unresponsive.
Even if we stop the sending load in this condition, JBossMQ stays unresponsive and no longer delivers the messages. This seems like a bug in itself.
Websphere is able to run the test for a long period of time because it balances its throughput for sender and receiver, causing little if no backlog.
This brings up some questions:
Is it possible to get JBossMQ to balance the throughput for send and receive? This seems like the logical thing to do, because with any size differential, JBossMQ will eventually fail at high load.
Should the bug be reported where JBossMQ no longer delivers messages, even when the sending load stops? It should at least be able to become responsive again when the load stops, otherwise it completely fails.
Is it possible to use JBoss in this test? Or is it simply not capable of very high loads?
Any help is appreciated!