我尝试以编程方式获取页面,每次解析主机都正好需要 10 秒。在另一台机器上,正好需要 30 秒。两者都是 Linux。
我的代码是 Java 编写的,但使用 wget 可以重现该问题:
time wget -d --header "User-Agent:Mozilla/5.0 (X11; Linux i686) AppleWebKit/534.24 (KHTML, like Gecko) Ubuntu/10.10 Chromium/11.0.696.65 Chrome/11.0.696.65 Safari/534.24" http://www.sportsdirect.com
这会挂起 10 秒:
Resolving www.sportsdirect.com... 86.17.5.250
我们在 Linux 上运行。
为了进一步混淆,同一台机器上的浏览器会立即获取相同的页面。
有什么线索吗?
答案1
这是因为 wget 和 lynx 没有缓存 DNS 结果,并且您的浏览器甚至可能禁用了 IPv6。
的 DNSwww.sportsdirect.com
已损坏,并且 AAAA 记录超时。
您可以使用wget 的-4
或--inet4-only
选项来强制仅使用 IPv4。
$ time host -t A www.sportsdirect.com
www.sportsdirect.com is an alias for sd.gwcorp.sports-world.com.
sd.gwcorp.sports-world.com has address 86.17.5.250
real 0m0.009s
user 0m0.000s
sys 0m0.000s
$ time host -t AAAA www.sportsdirect.com
;; connection timed out; no servers could be reached
real 0m14.008s
user 0m0.000s
sys 0m0.000s
答案2
浏览器可能正在缓存 DNS 结果。可能值得直接尝试查询已配置的 DNS 服务器,以查看问题是否出在它们身上——也许其中一个服务器特别慢或宕机。从行nameserver
中获取 IP 地址/etc/resolv.conf
并运行
dig +trace www.sportsdirect.com 8.8.8.8
(替换8.8.8.8
为您的 DNS 服务器的 IP 地址)