诊断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”页面。 如果我请求“控制台/忘记密码”,则不会有任何延迟。 我没有注意到任何其他服务器上类似的延迟。

事情是(显然)不相关的:

  • 家庭networking。 无论客户端如何连接到ISP的调制解调器以及尝试不同的调制解调器,问题依然存在。
  • 时间/拥堵。 延迟是一致的,无论何时发生请求。
  • DNS。 如果我使用IP地址而不是主机名,行为是一样的。
  • HTTPS握手。 这部分“curl”互动总是毫不拖延地进行下去; 当通过HTTPS访问“console / forgotPassword”时没有延迟。
  • 客户端configuration。 可以在多个浏览器中重新生成,并通过命令行上的“curl”进行重新生成。 可在多个客户端系统和操作系统上重现。
  • 图片/文字/等。 加载。 当使用“curl”时,延迟是存在的,它不要求额外的资源。

我的问题:这个最合理的解释是什么? 或者:接下来我应该怎么做来诊断呢?

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

networking问题? 这里棘手的部分是,延迟显然取决于应用程序级别的消息内容:被请求的特定页面。 而且应该encryption。 (小城镇)的ISPpipe理员说,他们不执行内容过滤…无论如何,如果沿途的某个节点有我的IP地址范围在黑名单或什么的。

我有一个类似的问题,这似乎是由xdebug远程连接超时造成的。 如果您的网页使用xdebug的PHP,也许这是导致您的问题。