哪些 Linux 配置会导致可执行文件在发出 HTTP/HTTPS 请求时挂起?

哪些 Linux 配置会导致可执行文件在发出 HTTP/HTTPS 请求时挂起?

我有一个 Python 应用程序,它使用 urllib2 查询 Facebook 图表以获取某些用户信息。该解决方案部署在 Ubuntu 服务器上。

在我的开发机器上,响应时间与简单 HTTP 请求的预期时间一致。然而,生产服务器在返回响应之前会挂起大约 60 秒。

为了测试它不是服务器的传出连接,我在完全相同的 URL 上使用了 curl,并且响应如预期的那样快速。

哪些 Linux 配置会导致可执行文件在发出 HTTP/HTTPS 请求时挂起?

答案1

最容易出错的是 DNS 查找失败。这些查找可能会超时,并且必须针对不同的服务器重试,但超时时间通常比 60 秒短很多,所以我认为这不太可能。

接下来,您需要与服务器建立 TCP 连接。服务器可能有多个 IP 地址,因此客户端需要决定尝试这些地址的顺序。如果按顺序尝试地址,则在客户端放弃一个 IP 并转到下一个 IP 之前,很可能会看到 60 秒的超时。

如果客户端与第一个 IP 地址之间的网络连接中断,您可能会看到客户端切换到下一个 IP 地址后,网络一直处于超时状态,然后才成功。这种行为在客户端和服务器同时支持 IPv4 和 IPv6 的设置中经常出现,但有人并没有真正关注 IPv6 连接,并且在 IPv6 连接因某种原因失败后没有修复设置。

接下来可能出错的通常是 MTU 问题。这些问题往往会导致连接停滞并最终超时,但在这种情况下,您不会继续使用下一个 IP 地址。

可能发生的另一件事是,如果您发出的请求过多,服务器可能会限制您的速度。

相关内容