带有Jetty的Java Web服务器 - TCP连接需要很长时间

时间:2010-06-03 20:52:43

标签: java unix tcp jetty

我有一个在JVM上运行相当高流量(20K req / min)的应用程序,在Ubuntu上有一个Jetty servlet容器。下面是我的Jetty配置:

         10      20      2000      2    

当我分析网络流量时,我意识到有时需要很长时间才能在Jetty运行的端口上建立TCP连接。长连接在3.0s和9.0s之间变化。端口配置为接受MAX个TCP连接。你知道什么可能导致接受连接的延迟吗?

由于

2 个答案:

答案 0 :(得分:2)

不幸的是,你没有提供更多的技术背景。

我假设你面临一个非常高的系统负载,因为连接建立了backlog(监听系统调用[ServerSocket]的参数)足够高。

接受连接总是涉及切换到内核模式,这可能会导致高系统负载,并且只能通过扩展应用程序(使用负载平衡)来解决,即您需要更大的机器或更多的机器。

答案 1 :(得分:2)

我相信你正在使用“按请求连接”模式。如果是这样,请尝试查看以下内容:

  • 建立持久连接,同一请求者重用连接
  • 切换到UDP消息
  • 在两个+框
  • 上使用负载均衡器+群集

内核/应用程序调优可能有所帮助,但在20K / min => 330 TPS我会说你必须看看不同的架构解决方案,而不仅仅是调整。建立TCP连接是一项非常繁重的操作,涉及内核机制,因此涉及上下文切换。