我们正在为一个非常大的网站运行 Apache 2.2 服务器。在过去的几个月里,我们有一些用户报告响应时间很慢,而其他用户(包括我们的资源,包括内部网络和家庭网络上的资源)没有看到任何性能下降。
经过大量的调查,我们终于在我们的配置中找到了导致反向 DNS 查找(超时)的“Deny from none”语句,这解决了我们的大部分问题,但我们仍然在 Apache 日志中看到一些客户(在日志格式中使用 %D)对图像、css、javascript 和其他静态内容的请求处理时间 > 300 秒。
我们检查了所有 Deny / Allow 语句中是否再次出现了“none”,以及我们所知道的所有其他会导致反向 DNS 查找的情况(比如在重写规则中使用“REMOTE_HOST”,在日志格式配置中使用 %a 而不是 %h),并且验证了 HostnameLookups 是否设置为“Off”。
顺便说一句,我们还验证了遇到此问题的用户的反向 DNS 查找不会超时 - 因此我相当确定在这种情况下 DNS 不是问题。
我已经想不出主意了。有人能告诉我有哪些 Apache 配置方案是我可能遗漏的,导致仅对某些用户而言静态内容的请求时间如此之长吗?
先感谢您。
答案1
当我发现此类事情时,我首先检查:
- DNS。使用网络转储(例如
tcpdump
或)wireshark
检查此问题,而不仅仅是查看配置文件。如果您确定这不是问题, - 这些用户的 traceroute / ping 是什么样子的?他们那边是否有共同点?我见过坏的 NAT 盒导致无尽的痛苦。我还见过用户本地的流量导致我的网站看起来比没有加载连接的其他网站慢,但他们注意到我的网站很慢。
- 防火墙/隧道。它们是否在做一些愚蠢的事情,例如阻止所有 ICMP?它们是否在隧道上?如果两个问题的答案都是肯定的,那么很有可能是 PMTU 发现以某种奇怪的方式超时了。
请注意,300 秒的响应时间可能意味着 Apache 放弃了它们,而不是表示已提供服务。5 分钟对于服务器来说已经是一段很长的等待时间,但对于客户端来说,等待这么长时间就更加疯狂了。