Wednesday, September 11, 2013

How to overcome WSO2 message broker OutOfMemory error

You many face difficulties when running WSO2 Message Broker with in-built Cassandra server as you are unable to allocate min memory requirement.

TID: [0] [MB] [2013-09-10 07:31:15,892] ERROR {org.wso2.andes.transport.network.mina.MinaNetworkHandler} - Exception caught by Mina {org.wso2.andes.transport.network.mina.MinaNetworkHandler} java.io.IOException: An established connection was aborted by the software in your host machine at sun.nio.ch.SocketDispatcher.read0(Native Method) at sun.nio.ch.SocketDispatcher.read(SocketDispatcher.java:25) at sun.nio.ch.IOUtil.readIntoNativeBuffer(IOUtil.java:198) at sun.nio.ch.IOUtil.read(IOUtil.java:171) at sun.nio.ch.SocketChannelImpl.read(SocketChannelImpl.java:243) at org.apache.mina.transport.socket.nio.SocketIoProcessor.read(SocketIoProcessor.java:218) at org.apache.mina.transport.socket.nio.SocketIoProcessor.process(SocketIoProcessor.java:198) at org.apache.mina.transport.socket.nio.SocketIoProcessor.access$400(SocketIoProcessor.java:45) at org.apache.mina.transport.socket.nio.SocketIoProcessor$Worker.run(SocketIoProcessor.java:485) at org.apache.mina.util.NamePreservingRunnable.run(NamePreservingRunnable.java:51) at java.lang.Thread.run(Thread.java:662)
TID: [0] [MB] [2013-09-10 07:33:59,226] WARN {org.wso2.andes.server.queue.QueueEntryImpl} - Requesting rejection by null subscriber:org.wso2.andes.server.queue.QueueEntryImpl@3daf57b4 {org.wso2.andes.server.queue.QueueEntryImpl} TID: [0] [MB] [2013-09-10 07:33:59,226] WARN {org.wso2.andes.server.queue.QueueEntryImpl} - Requesting rejection by null subscriber:org.wso2.andes.server.queue.QueueEntryImpl@42a70a0f {org.wso2.andes.server.queue.QueueEntryImpl} TID: [0] [MB] [2013-09-10 07:33:59,242] WARN {org.wso2.andes.server.queue.QueueEntryImpl} - Requesting rejection by null subscriber:org.wso2.andes.server.queue.QueueEntryImpl@648580f8 {org.wso2.andes.server.queue.QueueEntryImpl} TID: [0] [MB] [2013-09-10 07:33:59,242] WARN {org.wso2.andes.server.queue.QueueEntryImpl} - Requesting rejection by null subscriber:org.wso2.andes.server.queue.QueueEntryImpl@78d64d56 {org.wso2.andes.server.queue.QueueEntryImpl} TID: [0] [MB] [2013-09-10 07:33:59,242] WARN {org.wso2.andes.server.queue.QueueEntryImpl} - Requesting rejection by null subscriber:org.wso2.andes.server.queue.QueueEntryImpl@3d6f8714 {org.wso2.andes.server.queue.QueueEntryImpl} TID: [0] [MB] [2013-09-10 07:33:59,242] WARN {org.wso2.andes.server.queue.QueueEntryImpl} - Requesting rejection by null subscriber:org.wso2.andes.server.queue.QueueEntryImpl@650d518e {org.wso2.andes.server.queue.QueueEntryImpl} TID: [0] [MB] [2013-09-10 07:33:59,242] WARN {org.wso2.andes.server.queue.QueueEntryImpl} - Requesting rejection by null subscriber:org.wso2.andes.server.queue.QueueEntryImpl@4d657576 {org.wso2.andes.server.queue.QueueEntryImpl} TID: [0] [MB] [2013-09-10 07:33:59,242] WARN {org.wso2.andes.server.queue.QueueEntryImpl} - Requesting rejection by null subscriber:org.wso2.andes.server.queue.QueueEntryImpl@4002bdac {org.wso2.andes.server.queue.QueueEntryImpl} TID: [0] [MB] [2013-09-10 07:33:59,242] WARN {org.wso2.andes.server.queue.QueueEntryImpl} - Requesting rejection by null subscriber:org.wso2.andes.server.queue.QueueEntryImpl@73f28808 {org.wso2.andes.server.queue.QueueEntryImpl} TID: [0] [MB] [2013-09-10 07:33:59,242] WARN {org.wso2.andes.server.queue.QueueEntryImpl} - Requesting rejection by null subscriber:org.wso2.andes.server.queue.QueueEntryImpl@37c100b0 {org.wso2.andes.server.queue.QueueEntryImpl} TID: [0] [MB] [2013-09-10 07:33:59,242] WARN {org.wso2.andes.server.queue.QueueEntryImpl} - Requesting rejection by null subscriber:org.wso2.andes.server.queue.QueueEntryImpl@60143f68 {org.wso2.andes.server.queue.QueueEntryImpl}


TID: [0] [MB] [2013-09-10 07:55:59,188] ERROR {org.wso2.andes.server.protocol.AMQProtocolEngine} - IOException caught in/192.168.2.84:50034(admin), session closed implictly: java.io.IOException: An existing connection was forcibly closed by the remote host {org.wso2.andes.server.protocol.AMQProtocolEngine} TID: [0] [MB] [2013-09-10 08:12:15,079] INFO {org.wso2.andes.server.stats.PerformanceCounter} - PerfCountFDAutoRenewalWriteQueue_1:14000/0 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], tot=15035/5751 {org.wso2.andes.server.stats.PerformanceCounter} TID: [0] [MB] [2013-09-10 08:20:22,065] ERROR {org.wso2.andes.server.cassandra.QueueDeliveryWorker} - Error running Cassandra Message FlusherJava heap space {org.wso2.andes.server.cassandra.QueueDeliveryWorker} java.lang.OutOfMemoryError: Java heap space at java.nio.HeapByteBuffer.<init>(HeapByteBuffer.java:39) at java.nio.ByteBuffer.allocate(ByteBuffer.java:312) at org.wso2.andes.server.store.CassandraMessageStore$StoredCassandraMessage.<init>(CassandraMessageStore.java:4122) at org.wso2.andes.server.store.CassandraMessageStore$StoredCassandraMessage.<init>(CassandraMessageStore.java:4106) at org.wso2.andes.server.store.CassandraMessageStore.getMessagesFromNodeQueue(CassandraMessageStore.java:873) at org.wso2.andes.server.cassandra.QueueDeliveryWorker.run(QueueDeliveryWorker.java:241) 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:662



So the best practice is to have an external Cassandra server configured with WSO2 Message Broker, where you can have at least "2048M" for MAX_HEAP_SIZE or more if you face OutOfMemory exceptions.

You can find the complete installation guide [1].

[1] http://docs.wso2.org/display/MB210/Standalone+Deployment+on++External+Cassandra+Server

No comments:

Post a Comment