Hi Jeff,

I've just succeeded to reproduce leakage and checked in the fix.  The
selector was not closed when dispose() is invoked against an acceptor
which is not bound.

HTH,
Trustin

On Nov 26, 2007 7:38 PM, Jeff Mesnil <[EMAIL PROTECTED]> wrote:
> Hi,
>
> I'm using MINA trunk in an application and I've encountered an issue
> with it in our test suite.
>
> Basically, for each test, our test suite starts & stops a MINA server.
> Then depending on the tests, it opens connections or not.
>
> However, even when our tests do not open connection (i.e. only MINA
> acceptor is created), an excessive(?) number of pipes is created by MINA
> leading to a "too many open files" exception after a certain number of
> tests.
>
> All the first tests run by our test suite does not use MINA connectors.
> I commented out the code to start & stop MINA acceptor to see if it was
> the cause of the number of pipes and it seems it is.
>
> * without MINA start & stop:
>
> $ lsof -p $PID | grep pipe | wc -l
> 3
>
> * with MINA start & stop:
>
> $ lsof -p $PID | grep pipe | wc -l
> 203
> ...
> 987 -> generate an exception "too many open files"
>
>
> First question: is it normal that a succession of MINA acceptors
> creation/disposal generates such a number of pipe?
>
> The code I use to start & stop MINA is:
>
>     private void startMINAServer() throws Exception
>     {
>        if (acceptor == null)
>        {
>           acceptor = new NioSocketAcceptor();
>
>           // Prepare the configuration
>           acceptor.getFilterChain().addLast("mdc", new
> MdcInjectionFilter());
>           acceptor.getFilterChain().addLast("codec",
>                 new ProtocolCodecFilter(new PacketCodecFactory()));
>           acceptor.getFilterChain().addLast("logger", new LoggingFilter());
>
>           // Bind
>           acceptor.setLocalAddress(new InetSocketAddress(PORT));
>           acceptor.setReuseAddress(true);
>           acceptor.getSessionConfig().setReuseAddress(true);
>           acceptor.getSessionConfig().setKeepAlive(true);
>           acceptor.setDisconnectOnUnbind(false);
>
>           acceptor.setHandler(new ServerHandler());
>           acceptor.bind();
>
>           info("Started MINA on port " + PORT);
>        }
>     }
>
>     private void stopMINAServer()
>     {
>        if (acceptor != null)
>        {
>           acceptor.unbind();
>           acceptor.dispose();
>
>           info("Stopped MINA ");
>        }
>     }
>
> I thought at first that I was responsible of the increase of pipes by
> having unclosed streams. I don't think it is the case: I only used
> ByteArray streams in the codecs.
>
> It also seems that for each start of MINA, the increase is by 8 open
> pipes every time and it does not decrease every time the acceptor is
> disposed.
>
> I'm still investigating and trying to isolate this problem but I was
> wondering if it rings anyone's bell.
> Do you have any idea of the cause of all these open pipes?
>
> Thanks for the help,
> jeff
>
>
>
>



-- 
what we call human nature is actually human habit
--
http://gleamynode.net/
--
PGP Key ID: 0x0255ECA6

Reply via email to