I've attached a couple of simple classes, one server, and one client
to reproduce this lockup/OOM, at
https://issues.apache.org/jira/browse/DIRMINA-789. I appreciate your
time and help looking into this.


On Thu, Jun 10, 2010 at 6:32 PM, Emmanuel Lecharny <[email protected]> wrote:
> On 6/11/10 1:10 AM, Sai Pullabhotla wrote:
>>
>> Guys,
>>
>> I've been fighting with various issues using Mina over the past couple
>> of weeks, and a couple of them are -
>>
>> 1) OutOfMemory on Heap
>> 2) Possible dead lock (it could just be a GC issue). Application does
>> not make any progress nor any error is reported.
>> 3) When running under Java 6, I often am getting
>> java.lang.OutOfMemoryError: GC overhead limit exceeded, which tells me
>> that GC is not able to clean up the stuff.
>>
>> The version of MINA I'm using is 2.0-RC1.
>>
>> Just to give you a background - I'm trying to create what I would like
>> to call "Broker". A Broker basically connects to two different
>> servers, and forwards the data received from one server to the other.
>> Sounds simple, but I'm not having much luck using the Nio
>> implementation of MINA. Things seem to work fine when there is not
>> much data flows through the broker, but, when large amounts of data is
>> flowing through, I'm running out of memory.
>>
>> I did see the MINA documentation on the OOM, and am using
>> IoEventQueueThrottle, but did not get any better results. I hope I'm
>> using it the right way, as I did not see much documentation on that
>> class.
>>
>> I decided to stop working on the main project, and decided to put a
>> simple test case as follows:
>>
>> 1. Create a MINA server using NioSocketAcceptor. I called this the
>> MinaSenderServer. All this does is as soon as a client connects to it,
>> it starts sending a bunch of random data, upto the specified size, and
>> closes the session. Basically, the IoHandler.sessionOpened, goes into
>> a loop and calls IoSession.write until the desired amount of bytes are
>> written, and the calls the IoSession.close(false).
>>
>> 2. I Created another MINA server using the very same
>> NioSocketAcceptor. I called this the MinaReceiverServer. All this does
>> is - accepts connections from clients, and dumps any data received
>> from the client into a temp file.
>>
>> 3. I also created my Broker, which uses NioSocketConnector. It
>> connects to to MinaReceiverServer first, and then to MinaSenderServer.
>> Creates a tunnel using both the sessions. It then forwards the random
>> data received from MinaSenderServer to the MinaReceiverServer.
>>
>> This appears to be working for small amounts of data (<  1MB), but get
>> either a OOM on heap, or GC error in Java 6 or app appears to have
>> locked up making no progress. Just so you know, I'm running these 3
>> classes in 3 different JVMs using default memory settings for Java. My
>> understanding is that not much of data should be kept in memory, but
>> some how it is retained in memory, or GC is not able to reclaim it. My
>> requirement is that I would have server concurrent Broker sessions at
>> any given time, which could be carrying any amount of data ranging
>> from a few KB to a few GB.
>>
>> I've tried various configuration settings on the Acceptors and
>> Connectors such as -
>>
>> 1. Using thread pool executor/Not using
>> 2. Using IoEventQueue Throttle/Not using
>> 3. When using a Thread pool, waiting for WriteFutures to complete
>> 4. Setting various session configuration options such as Send and
>> Receive buffers of sockets
>>
>> None of these gave me any positive result. Obviously I'm missing
>> something.
>>
>> I can send the test classes that I wrote if some one wants to take a
>> look at it and what I'm doing wrong. Hopefully, it is something simple
>> that I'm unknown of, or overlooking. Let me know the preferred way for
>> posting this test code.
>>
>
> Can you create a JIRA and attach those files into it ?
>
> Thanks !
>
>
> --
> Regards,
> Cordialement,
> Emmanuel Lécharny
> www.nextury.com
>
>
>

Reply via email to