诊断 HTTP GET 请求中的 2 分钟延迟

诊断 HTTP GET 请求中的 2 分钟延迟

在极少数情况下,当我请求公共网页时,我会得到大约 2 分钟的 100% 可重现的延迟。

有问题的页面:https://id.openjdk.java.net/console/login

将客户端(curl)和服务器(apache)日志拼接在一起,典型的交换如下所示:

[client] 15:42:03.694959 => Send header, 96 bytes (0x60) 0000: GET /console/login HTTP/1.1
<DELAY HERE>
[server] [24/Feb/2015:22:44:26 +0000] "GET /console/login HTTP/1.1"
[client] 15:44:25.984150 <= Recv header, 17 bytes (0x11) 0000: HTTP/1.1 200 OK

(由于时区不同,小时数也不同;由于时钟不同步,秒数可能会略有偏差。)

重要的事情:

  • 客户端通过我的家庭 ISP 连接,并被分配了特定子网中的公共 IP 地址。如果分配了不同范围的静态 IP 地址,问题就会消失。
  • 请求此服务器上的“/console/login”页面。如果我请求“console/forgotPassword”,则不会出现延迟。我在其他服务器上没有发现类似的延迟。

(显然)不相关的事情:

  • 家庭网络。无论客户端如何连接到 ISP 的调制解调器,以及尝试使用不同的调制解调器,问题仍然存在。
  • 一天中的时间/拥塞。无论请求何时发生,延迟都是一致的。
  • DNS。如果我使用 IP 地址而不是主机名,行为是相同的。
  • HTTPS 握手。“curl”交互的这一部分始终无延迟地进行;并且通过 HTTPS 访问“console/forgotPassword”时不会有延迟。
  • 客户端配置。可在多个浏览器和命令行上通过“curl”重现。可在多个客户端系统和操作系统上重现。
  • 图像/脚本/等加载。使用“curl”时会出现延迟,因为它不需要额外的资源。

我的问题是:最合理的解释是什么?或者:我下一步该做什么来诊断?

服务器问题?据我了解Apache 日志格式,延迟正在发生服务器收到 GET 请求,但如果有人能确认这是读取日志时间戳的正确方法,我将不胜感激。如果是这样,我不清楚服务器在向 httpd 发出请求之前可能在做什么,或者 httpd 在获取时间戳之前可能在做什么。

网络问题?这里棘手的部分是延迟显然取决于应用程序级消息内容:所请求的特定页面。并且应该加密。(小镇)ISP 管理员表示他们不执行内容过滤... 无论如何,我想知道沿途的某个节点是否将我的 IP 地址范围列入了黑名单或类似的东西。

答案1

我遇到过类似的问题,似乎是由于 xdebug 远程连接超时导致的。如果您的页面使用带有 xdebug 的 php,那么这可能是导致问题的原因。

答案2

对我来说,页面会立即加载。
(我知道,这并不重要,但这是我的体验。)

你从哪里连接?你很可能遇到了某种 DDOS 防护。

也许您的 IP 地址已被列入黑名单,或者至少受到比其他地址更仔细的检查。

相关内容