我们最近对我们的开发服务器进行了一些维护;我们不知道那是什么,因为我们不维护我们的服务器。从那时起,我们遇到了大量 HTTP 请求,这些请求持续 20 秒以上才完成,或者更常见的是超时。这对我们来说是一个大问题,因为我们在开发服务器上使用未编译的 RequireJS,因此任何给定的页面都会执行 100 到 400 个文件或数据请求,即使所有请求都成功完成,页面本身也可能需要几分钟才能加载,等待请求完成。我们最初以为这是某种形式的 DDoS 保护,所以我们将所有内容转移到本地 Apache 服务器。但是,由于配置差异,我们正在尝试修复开发服务器并将所有内容移回那里。
我们开始试图找出问题究竟出在哪里(Apache、PHP 或扩展、MySQL 等)。最初,运行我们服务器的团队声称,问题很可能出在我们的代码库上,或者可能是因为我们使用 Zend 框架作为基础。在调查这个问题时,我们注意到的第一件显而易见的事情是,PHP 请求似乎从未遇到过任何大问题。它们可能会随时间波动,但永远不会超时。唯一超时的请求是针对静态资源的请求,例如 CSS、LESS、JS 或 HTML 文件。此外,我们还排除了任何较长的 MySQL 请求
为了进一步验证这一点,我们尝试使用time
PHP CLI,结果得到了预期的执行时间,但有时实际启动该过程需要大约 7 秒。我们甚至用一个简单的“Hello World”脚本复制了这个问题,该脚本没有加载 Zend。我们认为这个漫长的启动时间可能是由于 cURL 扩展 (https://bugs.php.net/bug.php?id=50410),但不确定。
偶然间,在处理一些 IE9 兼容性问题时,我们发现使用 IE9 时完全没有遇到超时问题,这种情况在几天内重现,同时其他浏览器也出现了超时问题。这很令人惊讶,因为我们认为任何浏览器都会出现问题,IE 就是其中之一。更令人惊讶的是,我们使用 Chrome 和 Firefox 中的扩展将请求标头更改为 IE9 标头,问题完全消失了!
由于我们不知道问题究竟是什么原因造成的,因此很难找到人来深入研究这个问题。如果我们能找到更多可以继续研究的东西,我们认为这可以加快整个过程。我们目前正在尝试安装一些调试工具来帮助分析服务器,以查看是否存在任何瓶颈,但我们不知道这需要多长时间。这种情况已经持续了大约 3 周,目前我们还不确定还要检查什么,因此任何建议都将不胜感激。
总结一下:
- 开发服务器最近开始超时。暂存服务器和实时服务器不受影响。
- 超时似乎仅发生在静态文件(JS、CSS、LESS、HTML 等)上
- Internet Explorer 中几乎从未发生超时
- 更改 FF 或 Chrome 中的请求标头以模拟 IE,也可以解决这些浏览器中的问题
- 从 PHP CLI 运行简单脚本会定期导致约 7 秒的延迟,然后才开始执行脚本。
我可以尝试根据需要提供额外的信息,但他们声称由于安全问题,很难从该组织获取服务器配置信息。
答案1
既然您提到您是:
- 仅在静态资源上超时
- 您最近切换到了 Apache
您必须研究 Apache 配置。这是完全不同的话题。
从配置和负载特性开始调查。由于问题不是发生在 IE 中,而是发生在 Chrome 和 FF 中(与我通常看到的正好相反),因此 Apache 配置中的某些内容导致了此问题。
观察 IE、FF、Chrome 中的标头 - 有什么区别?比较响应标头。
另请寻找:
- 你的 Apache 调整好了吗?
- 确保您在本地(Apache 本地)提供内容?
- 添加其他完善的方法来优化静态内容的服务,比如预压缩/gzip、缓存等等,有很多方法。