2015-11-03 381 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示例是個不錯的主意。