Hi,
Just ran into a little stumbling block and thought I'd send a note out seeing
if anyone had any suggestions for things to try.
I have a MINA system, running a test where nearly all of the traffic for the
system is keep-alives. Each client sends/expects keep-alives every 60 seconds.
Three missed keep-alives cause a disconnect. I'm using the KeepAlive filter
in MINA to handle this.
Version: MINA 2.0.0 M6
Server Hardware: 4 Core, 15 GB Ram (Extra large instance on EC2).
The test involves simulated clients connecting in and simply maintaining their
session. At first we connect in 4000 clients, and wait for the system to
stabilize. We then add another 4000, and wait for it to stabilize, for a total
of 8000 simultaneous connections. When we're adding another 4000, (somewhere
between 8000-12000), we start to have the keep-alive timers pop on the clients,
seeming to imply the server isn't keeping up. The CPU utilization of the
system is low. Here's my filter chain definition:
acceptor = new NioSocketAcceptor(Runtime.getRuntime().availableProcessors() +
1);
acceptor.getFilterChain().addLast("protocol", new ProtocolCodecFilter(new
MYCodecFactory()));
acceptor.getFilterChain().addLast("threadPool", new ExecutorFilter());
MYKeepAliveFilter keepAlives = new MYKeepAliveFilter(new
MYKeepAliveMessageFactory());
acceptor.getFilterChain().addLast("keepAlives", keepAlives);
acceptor.setHandler(devHandler);
My first thoughts are to up the number of I/O processor threads, or to possibly
add a second ExecutorFilter after the first one configured only for WRITE
events. Any thoughts?
Thanks,
Chris