Во-первых, спасибо всем авторам Netty за отличную библиотеку. Я счастливо использовал это в течение нескольких недель.
Недавно я начал загружать тесты своей системы, но теперь у меня возникают проблемы с масштабируемостью в Netty. Я попытался подключить как можно больше одновременных клиентов Netty к серверу Netty. Для небольшого количества клиентов (<50) система просто отлично работает. Однако, для большого количества клиентов (> 100), я нахожу, что клиентская сторона всегда запрашивает «ClosedChannelException»:
java.nio.channels.ClosedChannelException
в org.jboss.netty.channel.socket.nio.NioClientSocketPipelineSink $ 1.operationComplete (NioClientSocketPipelineSink.java:157)
в org.jboss.netty.channel.DefaultChannelFuture.notifyListener (DefaultChannelFuture.java:381)
в org.jboss.netty.channel.DefaultChannelFuture.notifyListeners (DefaultChannelFuture.java:367)
в org.jboss.netty.channel.DefaultChannelFuture.setSuccess (DefaultChannelFuture.java:316)
в org.jboss.netty.channel.AbstractChannel $ ChannelCloseFuture.setClosed (AbstractChannel.java:351)
на org.jboss.netty.channel.AbstractChannel.setClosed (AbstractChannel.java:188)
в org.jboss.netty.channel.socket.nio.NioSocketChannel.setClosed (NioSocketChannel.java:146)
на org.jboss.netty.channel.socket.nio.NioWorker.close (NioWorker.java:592)
в org.jboss.netty.channel.socket.nio.NioClientSocketPipelineSink $ Boss.close (NioClientSocketPipelineSink.java:415)
в org.jboss.netty.channel.socket.nio.NioClientSocketPipelineSink $ Boss.processConnectTimeout (NioClientSocketPipelineSink.java:379)
в org.jboss.netty.channel.socket.nio.NioClientSocketPipelineSink $ Boss.run (NioClientSocketPipelineSink.java:299)
в org.jboss.netty.util.ThreadRenamingRunnable.run (ThreadRenamingRunnable.java:108)
на org.jboss.netty.util.internal.DeadLockProofWorker $ 1.run (DeadLockProofWorker.java:44)
в java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1110)
в java.util.concurrent.ThreadPoolExecutor $ Worker.run (ThreadPoolExecutor.java:603)
at java.lang.Thread.run (Thread.java:722)
Мне интересно, как заставить Netty поддерживать больше одновременных клиентских подключений, таких как 10K. Я использую новейшую версию Netty. Ниже приведен сценарий тестирования:
Каждый клиент отправляет четырехбуквенную строку на сервер, и обработчик сервера ничего не делает при получении строки. Каждый сервер и клиенты работают на высокопроизводительной машине с 8-ядерным процессором и 16 ГБ памяти. Эти две машины связаны сетью Gigabyte.
У вас есть какие-нибудь намеки?