[rabbitmq-discuss] Limitations with RabbitMQ Java Client

Michael Klishin mklishin at gopivotal.com
Tue Oct 22 17:18:44 BST 2013


On 22 Oct 2013, at 20:02, "k.madnani84" <k.madnani84 at gmail.com> wrote:

> I am using the RabbitMQ Java client 3.1.5 to test the performance using
> MultiCastMain.java.But my RabbitMQ crashes when executing the following
> scenario:
> 

…

> My Memory High Watermark is 4.7 GB.
> 
> Is there any benchmark on how many consumers and producers maximum i can use
> with the above watermark.
> 
> i am facing this error at client end:
> 
> DefaultExceptionHandler: Consumer
> com.rabbitmq.client.QueueingConsumer at e02ddd
> (amq.ctag-Hk684-l36FBBCV79J4p7aw) method handleDelivery for channel
> AMQChannel(amqp://rbtadmin@135.213.26.33:5672/,1) threw an exception for
> channel AMQChannel(amqp://rbtadmin@135.213.26.33:5672/,1):
> java.lang.OutOfMemoryError: unable to create new native thread
> 	at java.lang.Thread.start0(Native Method)
> 	at java.lang.Thread.start(Thread.java:640)
> 	at
> java.util.concurrent.ThreadPoolExecutor.addIfUnderCorePoolSize(ThreadPoolExecutor.java:703)

No, RabbitMQ does not crash.

MulticastMain fails with java.lang.OutOfMemoryError
because it cannot create a new thread. Your OS is running out of kernel threads.

Every RabbitMQ Java client connection uses 6 threads (5 consumer work pool threads + I/O thread).
Multiplied by 2000 in your example, that means you need 12,000 kernel threads.

Use fewer publishers and consumers. Having thousands on a single machine won't give
you any better throughput than a couple of hundreds, in fact, it may yield worse results.

MK


More information about the rabbitmq-discuss mailing list