【问题标题】:Java Web Server with Jetty - TCP Connections Taking Long带有 Jetty 的 Java Web 服务器 - TCP 连接需要很长时间
【发布时间】:2010-06-04 09:17:03
【问题描述】:

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

10 20 2000 2

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

谢谢

【问题讨论】:

    标签: java unix tcp jetty


    【解决方案1】:

    很遗憾你没有提供更多的技术背景。

    我假设您面临着非常高的系统负载,因为建立了连接,所以积压(listen 系统调用 [ServerSocket] 的参数)已经足够高了。

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

    【讨论】:

    • 您能否具体说明什么样的技术背景比较有用?您需要应用程序或操作系统级别的规范吗?
    • 我认为这与系统负载有关,侦听和接受系统调用之间的时间被其他线程处理请求所消耗。您可以使用 top(1) 查看您的机器的情况
    【解决方案2】:

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

    • 建立持久连接,同一请求者重复使用该连接
    • 切换到 UDP 消息
    • 在两个以上的盒子上使用负载平衡器+集群

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-01-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多