我正在运行带有 Apache 2 的 Fedora 11 服务器。我试图进行优化,以便服务器端的运行速度尽可能快,并且我注意到(通过 Firefox 的 Firebug),在加载 Web 服务器上某个站点的主页时,它会对加载的每个文件(HTML、CSS、JavaScript、GIF、PNG、JPG 等)进行 DNS 查找。它查找的所有文件都是服务器本地的,所以我很惊讶它竟然会进行 DNS 查找。此外,每次查找都在 150-450 毫秒范围内,这对我来说太高了。
我尝试调整 /etc/resolve.conf 以使用 Google 的公共 DNS 服务器。我重新启动了网络服务并再次点击该页面,但数字并没有下降。由于没有看到任何收益,我已恢复到默认 DNS 服务器。
有什么想法可以解释为什么会出现以下情况:a) 首先进行 DNS 查找,以及 b) 实际查找时花费很长时间?
提前致谢。
答案1
任何对 DNS 名称的调用都需要查找,即使是本地调用,因此这部分是意料之中的。但是,它应该将记录缓存到 TTL 内,因此只要您对页面上的所有对象使用 DNS 名称,它就不必多次进行 DNS 查找。您不是恰好对页面上的每个对象使用唯一的 cname 吗?
检查您所在区域的 TTL 设置以确认其设置合理。
至于较长的时间,可能是 DNS 服务器或 DNS 客户端的原因。尝试使用 nslookup 直接对 DNS 服务器进行 DNS 查询,看看是否获得相同的响应时间。您可能希望从 TLD 到您的域名(或 cname)遍历域名路径,看看速度在哪里变慢。
排除(或加入)DNS客户端的一种方法是用firebug观察像google.com这样的公共网站,看看它是否也很慢。
答案2
我遇到过非常类似的问题,但最终解决了。问题出在我们的 iptables 配置上,据我所知,这是内部定制的,所以您可能没有遇到同样的问题,但为了以防万一,我想我还是把它链接起来。
“-m limit --limit 1/s
从我们的 iptables 配置中删除即可解决所出现的问题。”
答案3
我刚刚对我们的一台服务器的这个问题进行了故障排除 - Firebug 中显示每页有多个 DNS 查询,每个加载的项目一个。我们发现问题在于 Apache 配置中的 KeepAlive 设置为 Off。将其更改为“On”允许每个 TCP 连接发出多个请求,并阻止每个项目的 DNS 查询。
我们发现加载时间现在只有以前的一半到三分之一,并且 DNS 请求不再显示在 Firebug 中。
更多信息:
http://httpd.apache.org/docs/current/mod/core.html#keepalive
答案4
您对 DNS 服务器的 ping 时间是多少?如果您的 DNS 服务器延迟较高,那么您的 DNS 查找延迟也会较高。如果您的 DNS 服务器超载,请考虑向您的网络添加缓存名称服务器,这将提高性能。
您的网关还可以配置为赋予 DNS 流量更高的优先级,从而保持快速查找。
我以前从未使用过 Windows DNS 服务器,但也许你可以探索 Unix 路线。低延迟、高并发服务器才是 Unix 真正擅长的。