Как разрешить больше одновременных клиентских подключений к Netty?

Во-первых, спасибо всем участникам 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. Ниже приведен сценарий тестирования:

Каждый клиент отправляет серверу строку из четырех букв, а обработчик сервера ничего не делает после получения строки. Каждый из серверов и клиентов работает на высокопроизводительном компьютере с восьмиъядерным процессором и памятью 16 ГБ. Две машины соединены сетью Gigabyte.

У вас есть подсказки?

7
задан Jeff Huang 9 December 2011 в 07:06
поделиться