在POST请求中,Netty对巨大的有效负载执行缓慢

时间:2015-11-03 12:07:35

标签: json post java-8 netty payload

我使用的是netty-4.0.32.Final。以下是我的频道配置。

EventLoopGroup elGroup = new NioEventLoopGroup();
bootstrap = new ServerBootstrap();
            bootstrap.group(elGroup).channel(NioServerSocketChannel.class).option(ChannelOption.SO_BACKLOG, 15000)
                    .option(ChannelOption.SO_REUSEADDR, true)
                    .option(ChannelOption.MAX_MESSAGES_PER_READ, Integer.MAX_VALUE).option(ChannelOption.TCP_NODELAY, true)
                    .option(ChannelOption.SO_RCVBUF, Integer.MAX_VALUE)
                    .option(ChannelOption.SO_SNDBUF, Integer.MAX_VALUE)
                    .childHandler(new ChannelInitializer<SocketChannel>() {
                        @Override
                        protected void initChannel(SocketChannel ch) throws Exception {
                            ChannelPipeline p = ch.pipeline();
                            p.addLast(new HttpServerCodec());
                            p.addLast(new HttpObjectAggregator(Integer.MAX_VALUE));
                            p.addLast(new HttpRequestHandler(router, monitor, fileWriter,kafkaWriter, pluginManager,redisConnectionPool));
                        }

                    });

甚至我们使用EpollEventLoopGroup尝试使用EpollServerSocketChannel,但是我们在AB中获得了以下结果,用于巨大的有效负载PO​​ST请求。

2858byte - post.json

每秒请求数: 3452.96 [#/ sec](平均值)
每次请求的时间:72.402 [ms](平均值)

但是,当我们减少请求中的有效负载数据时,结果如下。

277byte - post3.json

每秒请求数: 10085.06 [#/ sec](平均值)
每次请求的时间:24.789 [ms](平均值)

但是,当我们发出GET请求时,我们会得到以下结果。

每秒请求数: 22592.77 [#/ sec](平均值)
每次请求的时间:11.065 [ms](平均值)

任何人都可以指导我如何改善巨大的有效负载PO​​ST请求的性能。

P.S:我们的请求的最大值将具有巨大的有效载荷。

1 个答案:

答案 0 :(得分:0)

有些信息可能对您有所帮助:

  1. 使用bossGroupworkerGroup可能效果更好(请参阅netty网站上的示例)。
  2. AB(Apache基准工具)应该打开keepalive选项(重用TCP连接,它非常重要,可能会浪费很多时间浪费在TCP连接上释放它们,使用netstat -naplt|grep yourport可能看一些)。
  3. 我发现你的配置很大(比如缓冲区),它不是瓶颈。
  4. 我一直在测试Netty HTTP(只是一个简单的测试,小数据)性能,它可以接近每秒200000个请求(多个客户端和异步通过apache HttpAsyncClient并使用PoolingNHttpClientConnectionManager来保持重用TCP连接)。

    最后,查看Netty示例是一个好主意。