【问题标题】:Unable to establish TCP connections with server无法与服务器建立 TCP 连接
【发布时间】:2015-08-20 13:30:27
【问题描述】:

我有 2 台 centOS-7 机器,比如机器 A、B。 机器 A 有一台服务器在端口 80 上侦听。当我在同一台机器上以每秒 2000 个请求运行 curl-loader(用于负载测试目的)时,所有请求都命中服务器,我检查了“ss -s”命令并打开TCP 套接字超过 2000 个。

但我的问题是当我在机器 B 中运行 curl-loader 并尝试访问服务器 A 时,只有少数请求到达服务器,其余的都退出了。 在机器 B 的 'ss -s' 命令中返回 2K+ 值。但在机器 A 中,'ss -s' 命令将仅返回值 25-30。其余所有请求均返回 TCP-CONNECT 错误

【问题讨论】:

  • 听起来服务器被限制了。在许多情况下,这对于保护系统免受过载是有意义的。例如,如果该服务器是 http 服务器,则有一个 max_connections 配置指令。您必须分享更多详细信息,以便我们提供更具体的帮助。
  • 对不起,我忘记在我的问题中提及这一点。我的服务器是 squid 代理服务器,没有最大连接限制。当我从同一台机器上点击 squid 时,所有请求都得到了服务,但从另一台机器上,所有请求都没有到达。正如我在我的问题中提到的,当请求来自另一台机器时,没有打开足够的套接字
  • 然后指向网络级别的限制,因此通过包过滤器(“防火墙”)。相同的动机,不同的层次。

标签: linux curl tcp tcp-ip


【解决方案1】:

@arkascha 可能是对的。一些节流正在发生。我只想补充一点,限制可以在网络中、服务器中或客户端中。它们中的任何一个都可能限制连接数。

最好在没有任何 squid 或高级软件的情况下对其进行测试。你可以这样做:

(在服务器上)$ echo hello | nc -l -k 10000

(在客户端) $ for ((i=0; i

这将在服务器计算机上的端口 10000 上创建一个“迷你”TCP 服务器。任何连接到该服务器的人都会收到消息“hello”。

然后从客户端,您可以在端口 10000 上创建 2000 个(几乎同时)到服务器的 TCP 连接。

如果成功建立连接,则限制可能处于“代理”级别。如果连接出现限制,则限制可能是在防火墙或网络级别。

【讨论】:

    猜你喜欢
    • 2020-04-06
    • 2012-10-17
    • 1970-01-01
    • 2019-06-21
    • 2021-07-18
    • 2018-08-09
    • 1970-01-01
    • 1970-01-01
    • 2021-03-02
    相关资源
    最近更新 更多