[Dev] [MB] Out of memory error in long running mb cluster

2015-03-18 Thread Pumudu Ruhunage
Hi,

I came across out of memory exception while doing long running test on mb
cluster with oracle database as message store. Following was the scenario i
tested.

1. Start two clustered mb nodes with serializers (nodeA(coordinator),
nodeB).
2. Add queue subscriber "MyQueue1", to nodeB and publish "MyQueue1"
messages to nodeA with average 1500 TPS.
3. Add queue subscriber "MyQueue2" to nodeA and publish "MyQueue2" messages
to nodeB with average 1000 TPS.
4. After around 14 hours, om exception has thrown from nodeA and all
operations has halted.

After analysing heap dump i found which thread has thrown the error, and
it's as follows.

"pool-25-thread-1" prio=5 tid=174 RUNNABLE
at java.lang.OutOfMemoryError.(OutOfMemoryError.java:48)
at java.lang.Long.toString(Long.java:267)
at com.google.gson.stream.JsonReader.nextString(JsonReader.java:816)
at com.google.gson.internal.bind.TypeAdapters$25.read(TypeAdapters.java:648)
at com.google.gson.internal.bind.TypeAdapters$25.read(TypeAdapters.java:659)
   Local Variable: com.google.gson.internal.bind.TypeAdapters$25#1
   Local Variable: com.google.gson.JsonArray#1
at com.google.gson.internal.bind.TypeAdapters$25.read(TypeAdapters.java:642)
at com.google.gson.internal.Streams.parse(Streams.java:44)
at com.google.gson.JsonParser.parse(JsonParser.java:84)
at com.google.gson.JsonParser.parse(JsonParser.java:59)
   Local Variable: com.google.gson.stream.JsonReader#1
at com.google.gson.JsonParser.parse(JsonParser.java:45)
at
org.wso2.andes.server.cluster.coordination.hazelcast.custom.serializer.TreeSetLongWrapperSerializer.read(TreeSetLongWrapperSerializer.java:53)
at
org.wso2.andes.server.cluster.coordination.hazelcast.custom.serializer.TreeSetLongWrapperSerializer.read(TreeSetLongWrapperSerializer.java:33)
at
com.hazelcast.nio.serialization.StreamSerializerAdapter.read(StreamSerializerAdapter.java:59)
   Local Variable:
com.hazelcast.nio.serialization.ByteArrayObjectDataInput#1
at
com.hazelcast.nio.serialization.SerializationServiceImpl.toObject(SerializationServiceImpl.java:221)
at com.hazelcast.spi.impl.NodeEngineImpl.toObject(NodeEngineImpl.java:156)
at com.hazelcast.map.MapService.toObject(MapService.java:872)
at com.hazelcast.map.proxy.MapProxyImpl.get(MapProxyImpl.java:53)
at
org.wso2.andes.kernel.slot.SlotManagerClusterMode.updateMessageID(SlotManagerClusterMode.java:347)
   Local Variable: java.util.TreeSet#1
at
org.wso2.andes.thrift.SlotManagementServiceImpl.updateMessageId(SlotManagementServiceImpl.java:56)
   Local Variable: java.lang.String#2380
   Local Variable: java.lang.String#2379
at
org.wso2.andes.thrift.slot.gen.SlotManagementService$Processor$updateMessageId.getResult(SlotManagementService.java:440)
   Local Variable:
org.wso2.andes.thrift.slot.gen.SlotManagementService$updateMessageId_result#2
at
org.wso2.andes.thrift.slot.gen.SlotManagementService$Processor$updateMessageId.getResult(SlotManagementService.java:429)
   Local Variable:
org.wso2.andes.thrift.slot.gen.SlotManagementService$updateMessageId_args#1
   Local Variable: org.wso2.andes.thrift.SlotManagementServiceImpl#1
at org.apache.thrift.ProcessFunction.process(ProcessFunction.java:32)
   Local Variable:
org.wso2.andes.thrift.slot.gen.SlotManagementService$Processor$updateMessageId#1
at org.apache.thrift.TBaseProcessor.process(TBaseProcessor.java:34)
at
org.apache.thrift.server.TThreadPoolServer$WorkerProcess.run(TThreadPoolServer.java:176)
   Local Variable: org.apache.thrift.transport.TSocket#2
   Local Variable: org.apache.thrift.protocol.TBinaryProtocol#2
   Local Variable: org.apache.thrift.protocol.TBinaryProtocol#3
   Local Variable:
org.wso2.andes.thrift.slot.gen.SlotManagementService$Processor#1
at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
   Local Variable:
org.apache.thrift.server.TThreadPoolServer$WorkerProcess#1
   Local Variable: java.util.concurrent.ThreadPoolExecutor#26
at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
   Local Variable: java.util.concurrent.ThreadPoolExecutor$Worker#41
at java.lang.Thread.run(Thread.java:745)

Have anyone faced similar issue ? What is the best method to handle this
out of memory issue?


Thanks,
-- 
Pumudu Ruhunage
Associate Software Engineer | WSO2 Inc
M: +94 779 664493  | http://wso2.com
___
Dev mailing list
Dev@wso2.org
http://wso2.org/cgi-bin/mailman/listinfo/dev


Re: [Dev] [MB] Out of memory error in long running mb cluster

2015-03-18 Thread Ramith Jayasinghe
Lets analyse the heap dump and see what caused the issue...
also check the metrics recorded (via matric library) when server went OOM.

On Wed, Mar 18, 2015 at 4:55 PM, Pumudu Ruhunage  wrote:

> Hi,
>
> I came across out of memory exception while doing long running test on mb
> cluster with oracle database as message store. Following was the scenario i
> tested.
>
> 1. Start two clustered mb nodes with serializers (nodeA(coordinator),
> nodeB).
> 2. Add queue subscriber "MyQueue1", to nodeB and publish "MyQueue1"
> messages to nodeA with average 1500 TPS.
> 3. Add queue subscriber "MyQueue2" to nodeA and publish "MyQueue2"
> messages to nodeB with average 1000 TPS.
> 4. After around 14 hours, om exception has thrown from nodeA and all
> operations has halted.
>
> After analysing heap dump i found which thread has thrown the error, and
> it's as follows.
>
> "pool-25-thread-1" prio=5 tid=174 RUNNABLE
> at java.lang.OutOfMemoryError.(OutOfMemoryError.java:48)
> at java.lang.Long.toString(Long.java:267)
> at com.google.gson.stream.JsonReader.nextString(JsonReader.java:816)
> at
> com.google.gson.internal.bind.TypeAdapters$25.read(TypeAdapters.java:648)
> at
> com.google.gson.internal.bind.TypeAdapters$25.read(TypeAdapters.java:659)
>Local Variable: com.google.gson.internal.bind.TypeAdapters$25#1
>Local Variable: com.google.gson.JsonArray#1
> at
> com.google.gson.internal.bind.TypeAdapters$25.read(TypeAdapters.java:642)
> at com.google.gson.internal.Streams.parse(Streams.java:44)
> at com.google.gson.JsonParser.parse(JsonParser.java:84)
> at com.google.gson.JsonParser.parse(JsonParser.java:59)
>Local Variable: com.google.gson.stream.JsonReader#1
> at com.google.gson.JsonParser.parse(JsonParser.java:45)
> at
> org.wso2.andes.server.cluster.coordination.hazelcast.custom.serializer.TreeSetLongWrapperSerializer.read(TreeSetLongWrapperSerializer.java:53)
> at
> org.wso2.andes.server.cluster.coordination.hazelcast.custom.serializer.TreeSetLongWrapperSerializer.read(TreeSetLongWrapperSerializer.java:33)
> at
> com.hazelcast.nio.serialization.StreamSerializerAdapter.read(StreamSerializerAdapter.java:59)
>Local Variable:
> com.hazelcast.nio.serialization.ByteArrayObjectDataInput#1
> at
> com.hazelcast.nio.serialization.SerializationServiceImpl.toObject(SerializationServiceImpl.java:221)
> at com.hazelcast.spi.impl.NodeEngineImpl.toObject(NodeEngineImpl.java:156)
> at com.hazelcast.map.MapService.toObject(MapService.java:872)
> at com.hazelcast.map.proxy.MapProxyImpl.get(MapProxyImpl.java:53)
> at
> org.wso2.andes.kernel.slot.SlotManagerClusterMode.updateMessageID(SlotManagerClusterMode.java:347)
>Local Variable: java.util.TreeSet#1
> at
> org.wso2.andes.thrift.SlotManagementServiceImpl.updateMessageId(SlotManagementServiceImpl.java:56)
>Local Variable: java.lang.String#2380
>Local Variable: java.lang.String#2379
> at
> org.wso2.andes.thrift.slot.gen.SlotManagementService$Processor$updateMessageId.getResult(SlotManagementService.java:440)
>Local Variable:
> org.wso2.andes.thrift.slot.gen.SlotManagementService$updateMessageId_result#2
> at
> org.wso2.andes.thrift.slot.gen.SlotManagementService$Processor$updateMessageId.getResult(SlotManagementService.java:429)
>Local Variable:
> org.wso2.andes.thrift.slot.gen.SlotManagementService$updateMessageId_args#1
>Local Variable: org.wso2.andes.thrift.SlotManagementServiceImpl#1
> at org.apache.thrift.ProcessFunction.process(ProcessFunction.java:32)
>Local Variable:
> org.wso2.andes.thrift.slot.gen.SlotManagementService$Processor$updateMessageId#1
> at org.apache.thrift.TBaseProcessor.process(TBaseProcessor.java:34)
> at
> org.apache.thrift.server.TThreadPoolServer$WorkerProcess.run(TThreadPoolServer.java:176)
>Local Variable: org.apache.thrift.transport.TSocket#2
>Local Variable: org.apache.thrift.protocol.TBinaryProtocol#2
>Local Variable: org.apache.thrift.protocol.TBinaryProtocol#3
>Local Variable:
> org.wso2.andes.thrift.slot.gen.SlotManagementService$Processor#1
> at
> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
>Local Variable:
> org.apache.thrift.server.TThreadPoolServer$WorkerProcess#1
>Local Variable: java.util.concurrent.ThreadPoolExecutor#26
> at
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
>Local Variable: java.util.concurrent.ThreadPoolExecutor$Worker#41
> at java.lang.Thread.run(Thread.java:745)
>
> Have anyone faced similar issue ? What is the best method to handle this
> out of memory issue?
>
>
> Thanks,
> --
> Pumudu Ruhunage
> Associate Software Engineer | WSO2 Inc
> M: +94 779 664493  | http://wso2.com
>
> ___
> Dev mailing list
> Dev@wso2.org
> http://wso2.org/cgi-bin/mailman/listinfo/dev
>
>


-- 
Ramith Jayasinghe
Technical Lead
WSO2 Inc., http://wso2.com
lean.enterprise.middleware

E: ram...@wso2.com
P: +94 777542851
___
Dev m

Re: [Dev] [MB] Out of memory error in long running mb cluster

2015-03-18 Thread Akalanka Pagoda Arachchi
Hi,

Maybe the error is not really in this tread, but has been occurred after
accumulating data from a memory leak. Better analyse the memory allocations.

Thanks,
Akalanka.

On Wed, Mar 18, 2015 at 4:58 PM, Ramith Jayasinghe  wrote:

> Lets analyse the heap dump and see what caused the issue...
> also check the metrics recorded (via matric library) when server went OOM.
>
> On Wed, Mar 18, 2015 at 4:55 PM, Pumudu Ruhunage  wrote:
>
>> Hi,
>>
>> I came across out of memory exception while doing long running test on mb
>> cluster with oracle database as message store. Following was the scenario i
>> tested.
>>
>> 1. Start two clustered mb nodes with serializers (nodeA(coordinator),
>> nodeB).
>> 2. Add queue subscriber "MyQueue1", to nodeB and publish "MyQueue1"
>> messages to nodeA with average 1500 TPS.
>> 3. Add queue subscriber "MyQueue2" to nodeA and publish "MyQueue2"
>> messages to nodeB with average 1000 TPS.
>> 4. After around 14 hours, om exception has thrown from nodeA and all
>> operations has halted.
>>
>> After analysing heap dump i found which thread has thrown the error, and
>> it's as follows.
>>
>> "pool-25-thread-1" prio=5 tid=174 RUNNABLE
>> at java.lang.OutOfMemoryError.(OutOfMemoryError.java:48)
>> at java.lang.Long.toString(Long.java:267)
>> at com.google.gson.stream.JsonReader.nextString(JsonReader.java:816)
>> at
>> com.google.gson.internal.bind.TypeAdapters$25.read(TypeAdapters.java:648)
>> at
>> com.google.gson.internal.bind.TypeAdapters$25.read(TypeAdapters.java:659)
>>Local Variable: com.google.gson.internal.bind.TypeAdapters$25#1
>>Local Variable: com.google.gson.JsonArray#1
>> at
>> com.google.gson.internal.bind.TypeAdapters$25.read(TypeAdapters.java:642)
>> at com.google.gson.internal.Streams.parse(Streams.java:44)
>> at com.google.gson.JsonParser.parse(JsonParser.java:84)
>> at com.google.gson.JsonParser.parse(JsonParser.java:59)
>>Local Variable: com.google.gson.stream.JsonReader#1
>> at com.google.gson.JsonParser.parse(JsonParser.java:45)
>> at
>> org.wso2.andes.server.cluster.coordination.hazelcast.custom.serializer.TreeSetLongWrapperSerializer.read(TreeSetLongWrapperSerializer.java:53)
>> at
>> org.wso2.andes.server.cluster.coordination.hazelcast.custom.serializer.TreeSetLongWrapperSerializer.read(TreeSetLongWrapperSerializer.java:33)
>> at
>> com.hazelcast.nio.serialization.StreamSerializerAdapter.read(StreamSerializerAdapter.java:59)
>>Local Variable:
>> com.hazelcast.nio.serialization.ByteArrayObjectDataInput#1
>> at
>> com.hazelcast.nio.serialization.SerializationServiceImpl.toObject(SerializationServiceImpl.java:221)
>> at com.hazelcast.spi.impl.NodeEngineImpl.toObject(NodeEngineImpl.java:156)
>> at com.hazelcast.map.MapService.toObject(MapService.java:872)
>> at com.hazelcast.map.proxy.MapProxyImpl.get(MapProxyImpl.java:53)
>> at
>> org.wso2.andes.kernel.slot.SlotManagerClusterMode.updateMessageID(SlotManagerClusterMode.java:347)
>>Local Variable: java.util.TreeSet#1
>> at
>> org.wso2.andes.thrift.SlotManagementServiceImpl.updateMessageId(SlotManagementServiceImpl.java:56)
>>Local Variable: java.lang.String#2380
>>Local Variable: java.lang.String#2379
>> at
>> org.wso2.andes.thrift.slot.gen.SlotManagementService$Processor$updateMessageId.getResult(SlotManagementService.java:440)
>>Local Variable:
>> org.wso2.andes.thrift.slot.gen.SlotManagementService$updateMessageId_result#2
>> at
>> org.wso2.andes.thrift.slot.gen.SlotManagementService$Processor$updateMessageId.getResult(SlotManagementService.java:429)
>>Local Variable:
>> org.wso2.andes.thrift.slot.gen.SlotManagementService$updateMessageId_args#1
>>Local Variable: org.wso2.andes.thrift.SlotManagementServiceImpl#1
>> at org.apache.thrift.ProcessFunction.process(ProcessFunction.java:32)
>>Local Variable:
>> org.wso2.andes.thrift.slot.gen.SlotManagementService$Processor$updateMessageId#1
>> at org.apache.thrift.TBaseProcessor.process(TBaseProcessor.java:34)
>> at
>> org.apache.thrift.server.TThreadPoolServer$WorkerProcess.run(TThreadPoolServer.java:176)
>>Local Variable: org.apache.thrift.transport.TSocket#2
>>Local Variable: org.apache.thrift.protocol.TBinaryProtocol#2
>>Local Variable: org.apache.thrift.protocol.TBinaryProtocol#3
>>Local Variable:
>> org.wso2.andes.thrift.slot.gen.SlotManagementService$Processor#1
>> at
>> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
>>Local Variable:
>> org.apache.thrift.server.TThreadPoolServer$WorkerProcess#1
>>Local Variable: java.util.concurrent.ThreadPoolExecutor#26
>> at
>> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
>>Local Variable: java.util.concurrent.ThreadPoolExecutor$Worker#41
>> at java.lang.Thread.run(Thread.java:745)
>>
>> Have anyone faced similar issue ? What is the best method to handle this
>> out of memory issue?
>>
>>
>> Thanks,
>> --
>> Pumudu Ruhunage
>> Associate Software Engineer | WSO2 Inc
>> M: +94 779 664493  |

Re: [Dev] [MB] Out of memory error in long running mb cluster

2015-03-18 Thread Sajini De Silva
Hi,

We found the cause for this error. Will fix this and run the tests again.

Thank you,
Sajini

On Wed, Mar 18, 2015 at 5:36 PM, Akalanka Pagoda Arachchi <
darsha...@wso2.com> wrote:

> Hi,
>
> Maybe the error is not really in this tread, but has been occurred after
> accumulating data from a memory leak. Better analyse the memory allocations.
>
> Thanks,
> Akalanka.
>
> On Wed, Mar 18, 2015 at 4:58 PM, Ramith Jayasinghe 
> wrote:
>
>> Lets analyse the heap dump and see what caused the issue...
>> also check the metrics recorded (via matric library) when server went OOM.
>>
>> On Wed, Mar 18, 2015 at 4:55 PM, Pumudu Ruhunage  wrote:
>>
>>> Hi,
>>>
>>> I came across out of memory exception while doing long running test on
>>> mb cluster with oracle database as message store. Following was the
>>> scenario i tested.
>>>
>>> 1. Start two clustered mb nodes with serializers (nodeA(coordinator),
>>> nodeB).
>>> 2. Add queue subscriber "MyQueue1", to nodeB and publish "MyQueue1"
>>> messages to nodeA with average 1500 TPS.
>>> 3. Add queue subscriber "MyQueue2" to nodeA and publish "MyQueue2"
>>> messages to nodeB with average 1000 TPS.
>>> 4. After around 14 hours, om exception has thrown from nodeA and all
>>> operations has halted.
>>>
>>> After analysing heap dump i found which thread has thrown the error, and
>>> it's as follows.
>>>
>>> "pool-25-thread-1" prio=5 tid=174 RUNNABLE
>>> at java.lang.OutOfMemoryError.(OutOfMemoryError.java:48)
>>> at java.lang.Long.toString(Long.java:267)
>>> at com.google.gson.stream.JsonReader.nextString(JsonReader.java:816)
>>> at
>>> com.google.gson.internal.bind.TypeAdapters$25.read(TypeAdapters.java:648)
>>> at
>>> com.google.gson.internal.bind.TypeAdapters$25.read(TypeAdapters.java:659)
>>>Local Variable: com.google.gson.internal.bind.TypeAdapters$25#1
>>>Local Variable: com.google.gson.JsonArray#1
>>> at
>>> com.google.gson.internal.bind.TypeAdapters$25.read(TypeAdapters.java:642)
>>> at com.google.gson.internal.Streams.parse(Streams.java:44)
>>> at com.google.gson.JsonParser.parse(JsonParser.java:84)
>>> at com.google.gson.JsonParser.parse(JsonParser.java:59)
>>>Local Variable: com.google.gson.stream.JsonReader#1
>>> at com.google.gson.JsonParser.parse(JsonParser.java:45)
>>> at
>>> org.wso2.andes.server.cluster.coordination.hazelcast.custom.serializer.TreeSetLongWrapperSerializer.read(TreeSetLongWrapperSerializer.java:53)
>>> at
>>> org.wso2.andes.server.cluster.coordination.hazelcast.custom.serializer.TreeSetLongWrapperSerializer.read(TreeSetLongWrapperSerializer.java:33)
>>> at
>>> com.hazelcast.nio.serialization.StreamSerializerAdapter.read(StreamSerializerAdapter.java:59)
>>>Local Variable:
>>> com.hazelcast.nio.serialization.ByteArrayObjectDataInput#1
>>> at
>>> com.hazelcast.nio.serialization.SerializationServiceImpl.toObject(SerializationServiceImpl.java:221)
>>> at
>>> com.hazelcast.spi.impl.NodeEngineImpl.toObject(NodeEngineImpl.java:156)
>>> at com.hazelcast.map.MapService.toObject(MapService.java:872)
>>> at com.hazelcast.map.proxy.MapProxyImpl.get(MapProxyImpl.java:53)
>>> at
>>> org.wso2.andes.kernel.slot.SlotManagerClusterMode.updateMessageID(SlotManagerClusterMode.java:347)
>>>Local Variable: java.util.TreeSet#1
>>> at
>>> org.wso2.andes.thrift.SlotManagementServiceImpl.updateMessageId(SlotManagementServiceImpl.java:56)
>>>Local Variable: java.lang.String#2380
>>>Local Variable: java.lang.String#2379
>>> at
>>> org.wso2.andes.thrift.slot.gen.SlotManagementService$Processor$updateMessageId.getResult(SlotManagementService.java:440)
>>>Local Variable:
>>> org.wso2.andes.thrift.slot.gen.SlotManagementService$updateMessageId_result#2
>>> at
>>> org.wso2.andes.thrift.slot.gen.SlotManagementService$Processor$updateMessageId.getResult(SlotManagementService.java:429)
>>>Local Variable:
>>> org.wso2.andes.thrift.slot.gen.SlotManagementService$updateMessageId_args#1
>>>Local Variable: org.wso2.andes.thrift.SlotManagementServiceImpl#1
>>> at org.apache.thrift.ProcessFunction.process(ProcessFunction.java:32)
>>>Local Variable:
>>> org.wso2.andes.thrift.slot.gen.SlotManagementService$Processor$updateMessageId#1
>>> at org.apache.thrift.TBaseProcessor.process(TBaseProcessor.java:34)
>>> at
>>> org.apache.thrift.server.TThreadPoolServer$WorkerProcess.run(TThreadPoolServer.java:176)
>>>Local Variable: org.apache.thrift.transport.TSocket#2
>>>Local Variable: org.apache.thrift.protocol.TBinaryProtocol#2
>>>Local Variable: org.apache.thrift.protocol.TBinaryProtocol#3
>>>Local Variable:
>>> org.wso2.andes.thrift.slot.gen.SlotManagementService$Processor#1
>>> at
>>> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
>>>Local Variable:
>>> org.apache.thrift.server.TThreadPoolServer$WorkerProcess#1
>>>Local Variable: java.util.concurrent.ThreadPoolExecutor#26
>>> at
>>> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
>>>Local Variable: java.ut