小编Bri*_*lli的帖子

Netty比Tomcat慢

我们刚刚完成构建服务器以将数据存储到磁盘并使用Netty进行了前端处理.在负载测试期间,我们看到Netty扩展到每秒约8,000条消息.鉴于我们的系统,这看起来很低.对于基准测试,我们编写了一个Tomcat前端并运行相同的负载测试.通过这些测试,我们每秒获得大约25,000条消息.

以下是我们的负载测试机的规格:

  • Macbook Pro Quad核心
  • 16GB的RAM
  • Java 1.6

这是Netty的负载测试设置:

  • 10个主题
  • 每个线程100,000条消息
  • Netty服务器代码(非常标准) - 服务器上的Netty管道是两个处理程序:FrameDecoder和处理请求和响应的SimpleChannelHandler.
  • 客户端JIO使用Commons Pool来池和重用连接(池的大小与线程数相同)

以下是Tomcat的负载测试设置:

  • 10个主题
  • 每个线程100,000条消息
  • Tomcat 7.0.16,默认配置使用Servlet来调用服务器代码
  • 客户端使用URLConnection而没有任何池

我的主要问题是为什么表现如此巨大?有没有明显的Netty可以让它比Tomcat运行得更快?

编辑:这是主要的Netty服务器代码:

NioServerSocketChannelFactory factory = new NioServerSocketChannelFactory();
ServerBootstrap server = new ServerBootstrap(factory);
server.setPipelineFactory(new ChannelPipelineFactory() {
  public ChannelPipeline getPipeline() {
    RequestDecoder decoder = injector.getInstance(RequestDecoder.class);
    ContentStoreChannelHandler handler = injector.getInstance(ContentStoreChannelHandler.class);
    return Channels.pipeline(decoder, handler);
  }
});

server.setOption("child.tcpNoDelay", true);
server.setOption("child.keepAlive", true);
Channel channel = server.bind(new InetSocketAddress(port));
allChannels.add(channel);
Run Code Online (Sandbox Code Playgroud)

我们的处理程序看起来像这样:

public class RequestDecoder extends FrameDecoder {
  @Override
  protected ChannelBuffer decode(ChannelHandlerContext ctx, Channel channel, ChannelBuffer buffer) …
Run Code Online (Sandbox Code Playgroud)

java io tomcat netty

26
推荐指数
1
解决办法
1万
查看次数

标签 统计

io ×1

java ×1

netty ×1

tomcat ×1