为什么访问我的网站时,我的DNS查询时间太长(300 + ms)?

我正在用Apache 2运行一个Fedora 11服务器。我试图优化,所以事情从服务器端尽可能快,我注意到(通过Firebug for Firefox),加载其中一个的主页网站上的每一个文件加载(HTML,CSS,JavaScript,GIF,PNG,JPG等),它做了一个DNS查找。 所有正在查找的文件都是服务器本地的,所以我很惊讶地发现它甚至做了DNS查询。 此外,每个查找都在150-450ms的范围内,这对我来说太高了。

我试过调整/etc/resolve.conf来使用Google的公有DNS服务器。 我重新启动了networking服务,并再次点击该页面,但数字没有下降。 我已经恢复到默认的DNS服务器,因为我没有看到任何收益。

关于是什么导致它的任何想法:a)首先做dns查找,b)做实际查找时花费那么长时间?

提前致谢。

任何对DNS名称的调用都需要查找,即使它是本地的,也是需要的。 但是,它应该只要loggingTTL的logging,所以只要你在页面上使用了所有对象的DNS名称,就不必多次进行DNS查询。 你不会碰巧在页面上的每个对象使用唯一的cnames?

检查您的区域的TTL设置,以确认它设置为合理的。

至于时间较长,可能来自DNS服务器或DNS客户端。 尝试使用nslookup进行testing,直接对DNS服务器进行DNS查询,看看是否得到相同的响应时间。 您可能需要将域名path从顶级域名(TLD)转到您的域名(或域名),以查看域名的放慢速度。

排除(或在)您的DNS客户端的一种方法是用firebug观看像google.com这样的公共网站,看它是否也很慢。

我有一个非常类似的问题,并解决了它。 这是我们的iptablesconfiguration的一个问题,我知道是内部定制的,所以你可能没有同样的问题,但我想我会把它连接起来。

一次只能从新的Web服务器接收一个文件

“从我们的iptablesconfiguration中删除-m limit --limit 1/s解决了所提出的问题。”

我刚刚通过我们的服务器解决了这个确切的问题 – 每个页面的多个DNS查找显示在萤火虫中,一个用于每个被加载的项目。 我们发现问题是,在Apacheconfiguration中,KeepAlive被设置为Off。 将其更改为“开”将启用每个TCP连接的多个请求,并阻止每个项目的DNS查找。

我们发现加载时间现在是过去的三分之一,并且DNS请求不再显示在萤火虫中。

更多信息:

http://httpd.apache.org/docs/current/mod/core.html#keepalive

你logging的域名,或做一些其他反向DNS查找用户的IP地址?

当你在你的apacheconfiguration文件中使用域名而不是IP地址的时候,通常也是一个问题。

什么是你的DNS服务器的ping时间? 如果你的DNS服务器的延迟很高,那么你将得到高延迟DNS查询。 如果你的DNS服务器过载了,考虑添加一个caching名字服务器给你的networking,这样可以提高性能。

您的网关也可以configuration为给予DNS更高的优先级,从而保持快速查找。

我从来没有使用Windows DNS服务器,但也许你可以探索UNIX路线。 低延迟,高并发服务器是unix真正擅长的。

检查您的内容使用的path。 你有绝对或相对的path使用,你使用一个fqdn的内容?

例:

 <img src="http://mysite.mydomain.com/mypic.png" /> 

代替:

 <img src="mypic.png" /> 

根据您的DNS的风格和其他因素,完全限定的域名每次都可能触发DNS查找。

这可能是由这里描述的Keep-Alive问题引起的: http : //linuxmafia.com/pipermail/sf-lug/2010q2/007698.html ??

有关某些背景信息,请参阅此处的第14.10节: http : //www.w3.org/Protocols/rfc2616/rfc2616-sec14.html以及(特别是第8.1.2节): http : //www.w3.org/Protocols /rfc2616/rfc2616-sec8.html

基本上,HTTP 1.1版本默认使用持久连接。 我和你有同样的问题,事实certificate,我的本地Web服务器强制浏览器closures连接(在响应问题“连接:closures”标题)。

这听起来更像是一个客户端问题,而不是服务器问题。 服务器几乎可以肯定是不在做DNS查询 – 这是你用来连接它的任何客户端。 如果我在这一点上是错误的,那么你应该明确的说明,因为这个post就像是在查找服务器一样,而这简直是令人毛骨悚然 。 🙂

猜测:您的客户端浏览器configuration为自动检测,并且您的WPAD.dat / PAC文件使用需要DNSparsing的方法 – 类似于IsInNet,DnsResolve或类似方法。

这可能会与客户端上禁用的DNScaching结合使用。

在Windows上,IE过去有一个内置的DNScaching,但我认为这随后消失了,转而使用Windows DNS客户端(dnscache)服务。 不知道其他浏览器或平台。 (你尝试过其他浏览器吗?)

所以,我的$ 0.02:closures所有代理设置,并看看你得到什么。 或者打开一个显式代理并closures自动检测,代理负责所有名称parsing。 有趣!

我正在分析一个外部网站的萤火虫中看到相同的行为。 AFAICT,DNS服务器没有任何问题 – 挖显示一个完全合理的TTL。 但由于某些原因,FF需要几百ms才能完成请求的DNS查找部分。 也许在萤火虫的错误?