Sorry - I am cross posting as I first posted in users but it really is
applicable to devs. Please help. Thanks.


Hi -

I was excited to look at MINA and wrote a small program to test NxN testing.


Each client will send a message which is distributed to everyone in the
channel - broadcast server. iosession is kept in a vector and when a
message is arrived, its broadcasted.


class VectorHandler1 extends IoHandlerAdapter {

   public static Vector IoSessions = new Vector();

   public void exceptionCaught(IoSession session, Throwable t) throws
Exception {

       System.out.print(t.getMessage() + " ");
       session.close();
       IoSessions.remove(session);

   }

   public void messageReceived(IoSession session, Object msg) throws
Exception {

       String str = (String) msg;
       for(int i=0;i<IoSessions.size();i++)
       {
           ((IoSession) IoSessions.get(i)).write(str);
       }

   }

   public void sessionCreated(IoSession session) throws Exception {

       System.out.println("Session created " + session.getRemoteAddress());
       IoSessions.add(session);
   }

   public void sessionClosed(IoSession session) throws Exception {


      IoSessions.remove(session);


   }


}
public class MINA1Server {


   /**
    * <p>Starts a server at a given port.</p>
    *
    * @param port Port Server starts listening
    * @throws IOException if bind or selector failed
    */
   public MINA1Server(int port) throws IOException {

              ByteBuffer.setUseDirectBuffers(false);
       ByteBuffer.setAllocator(new SimpleByteBufferAllocator());

       IoAcceptor acceptor = new SocketAcceptor();

       SocketAcceptorConfig cfg = new SocketAcceptorConfig();
       cfg.getFilterChain().addLast( "logger", new LoggingFilter() );
       acceptor.bind( new InetSocketAddress(port), new VectorHandler1(),
cfg);
       System.out.println("MINA server started.");


   }


   public static void main(String[] args) throws Exception
   {
       new MINAServer(16578);
   }
}


The test program makes 100 connections and we test the 100x100 in 5 seconds
gap.

The R/W messages are printed every 3 seconds.

R: 0, W: 0 Connections 100
R: 202, W: 1304 Connections 100
R: 202, W: 20200 Connections 100
R: 302, W: 30200 Connections 100
R: 303, W: 30234 Connections 100
R: 402, W: 40200 Connections 100
R: 502, W: 50200 Connections 100
R: 502, W: 50200 Connections 100
R: 602, W: 60200 Connections 100
R: 604, W: 60367 Connections 100
R: 702, W: 70200 Connections 100
R: 802, W: 80200 Connections 100
R: 802, W: 80200 Connections 100
R: 902, W: 90200 Connections 100
R: 906, W: 90551 Connections 100
R: 1002, W: 100200 Connections 100
R: 1102, W: 110200 Connections 100
R: 1102, W: 110200 Connections 100
R: 1202, W: 120200 Connections 100
R: 1205, W: 120417 Connections 100
R: 1302, W: 130200 Connections 100
R: 1402, W: 140200 Connections 100
R: 1402, W: 140200 Connections 100
R: 1502, W: 150200 Connections 100
R: 1565, W: 156466 Connections 100
R: 1602, W: 160200 Connections 100
R: 1702, W: 170200 Connections 100
R: 1702, W: 170200 Connections 100
R: 1802, W: 180200 Connections 100
R: 1869, W: 186679 Connections 100
R: 1902, W: 190200 Connections 100
R: 2002, W: 200200 Connections 100
R: 2002, W: 200200 Connections 100
R: 2102, W: 203923 Connections 100
R: 2175, W: 203923 Connections 100
R: 2202, W: 203923 Connections 100
R: 2302, W: 203923 Connections 100
Session created /127.0.0.1:59439
R: 2303, W: 203924 Connections 101
R: 2404, W: 204025 Connections 101
R: 2478, W: 204030 Connections 101
R: 2571, W: 204192 Connections 101
R: 2676, W: 204297 Connections 101
R: 2684, W: 204305 Connections 101
R: 2784, W: 204405 Connections 101
R: 2823, W: 204405 Connections 101
R: 2884, W: 204505 Connections 101
R: 2984, W: 204605 Connections 101
R: 2984, W: 204605 Connections 101
R: 3084, W: 204705 Connections 101
R: 3184, W: 204707 Connections 101
R: 3184, W: 204805 Connections 101
R: 3284, W: 204905 Connections 101
R: 3284, W: 204905 Connections 101
null null null null null null null null null null null null null null null
null
null null null null null null null null null null null null null null null
null
null null null null null null null null null null null null null null null
null
null null null null null null null null null null null null null null null
null
null null null null null null null null null null null null null null null
null
null null null null null null null null null null null null null null null
null
null null null null null null null null null null null null null null null
null
null null null null null null null null null null null null null null null
null
null null null null null null null null null null null null null null null
null
null null null null null null null null null null null null null null null
null
null null null null null null null null null null null null null null null
null
null null null null null null null null null null null null null null null
null
null null null null null null null null R: 3384, W: 205105 Connections 1
R: 3384, W: 205105 Connections 1
R: 3384, W: 205105 Connections 1
R: 3384, W: 205105 Connections 1
R: 3384, W: 205105 Connections 1

it gives heap error (OOM), writetimeout exception etc. I haven;t printed the
actual message for brevity.

I used 64M to begin with and looked at the jconsole - it really never
releases the memory. Clicking on GC too doesn't do anything either.

The program starts well and gradually stalls.

I also tried "C:\Program Files\Java\jdk1.6.0_12\bin\java" -server  -Xms1600M
-Xmx1600M on the same machine which has 4GB

I also tried direct memory buffer \size to 128M but none of them really
help.

Can someone confirm that they can receive 10k /sec - for days? Whats the
configuration used?

My broadcast server chokes for 10secs when tried 100x100 in 5 sec interval
after 15 attempts.

Thanks.

Reply via email to