2015-11-03 58 views
0

我正在使用netty-4.0.32.Final。以下是我的频道配置。Netty对POST请求上的巨大负载执行缓慢

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)); 
         } 

        }); 

即使我们试图用EpollServerSocketChannel与EpollEventLoopGroup,但我们得到以下结果AB为巨大的有效载荷POST请求。

2858byte - 每秒post.json

要求:3452.96 [#/秒](平均)每请求
时间:72.402 [毫秒](平均)

然而,当我们减少请求中的有效载荷数据,结果如下。

277byte - 每秒post3.json

要求:10085.06 [#/秒](平均)每请求
时间:24.789 [毫秒](平均)

然而,当我们使GET请求,我们得到下面的结果。每秒

要求:22592.77 [#/秒(平均)每个请求
时间:11.065 [毫秒](平均)

任何人都可以指导我如何才能提高的巨大有效负载的性能POST请求。

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

回答

0

有一些信息可能帮助您:

  1. 使用bossGroupworkerGroup也许效果更好(请参阅从网状网的例子)。
  2. AB(Apache基准工具)应该打开keepalive选项(重用TCP连接,这很重要,可能会浪费很多时间在bulid TCP连接上释放它们,使用netstat -naplt|grep yourport可能会看到一些)。
  3. 我发现你的一些配置很大(像缓冲区),它不是瓶颈。

我已被测试的Netty HTTP(只是一个简单的测试,小的数据)的性能,它可以是接近达到每秒200000请求(多客户端和异步通过Apache HttpAsyncClient并使用PoolingNHttpClientConnectionManager保持重用TCP连接)。

最后,查看Netty示例是个不错的主意。