资源的 HTTP 请求随机 - 大约在 1-5% 的时间之间(每个资源,而不是每个页面加载) - 需要很长时间才能传送到浏览器(约 20 秒),甚至不会无限期地挂起。(底部列表中列出的服务器详细信息)。
<head>
由于 JavaScript 资源挂在标签内,这导致对任何页面的大约每 5 个请求似乎挂起。
资源是 css、js 和小图像文件,直接由 apache(无脚本语言)提供服务,尽管页面加载(涉及 PHP 或 Rails)也很少挂起,与任何其他资源的机会相同(1-5% 的时间) ,所以这似乎是与 Apache 请求相关的问题。
附加信息:
- 我已经检查了空闲的工人
server-status
,正如预期的那样,我仍然有 98% 的空闲工人。尽管这可能是相关的,因为挂起适用于 FastCGI 不提供的静态资源(资源是静态的)。 - 我不是唯一一个有这个问题的人。其他人也有同样的问题,并且来自不同的 IP 地址。
- 这在作为 HTTP 客户端的 Google Chrome 和 Firefox 中都会发生。
- 我尝试在新选项卡中不断强制刷新相同的 JS 文件。它最终导致了同样的绞刑。
- Google Chrome 的“时间”选项卡报告这些挂起请求之一的等待时间为 34 毫秒,接收时间为 19.27 秒。这是否意味着 Apache 已经准备好要交付的文件内容,只是在合理的时间内交付时遇到了麻烦?
- error.log 没有显示任何错误。error.log 中有一些预期的 404 和 500 错误,但这些与挂起无关;这些是不存在页面的实际错误和 PHP 致命错误。
- 我收到了一些可疑的 206 Partial Content 响应,主要是针对静态内容,尽管挂起比那些部分内容更频繁地发生。我几乎到处都得到 200 OK 响应,我可以确认在 apache access.log 中报告为 200 OK 的无限期挂起的资源。
- 我确实为 Redmine 安装了 mod_passenger。我不知道这是否有帮助,但怀疑这台服务器的安装与我使用的所有其他服务器不同。虽然 mod_passenger 不应该影响静态内容,尤其是在非 ruby 项目文件夹中,不是吗?
- 该服务器在 Ubuntu 13.10 上使用 Apache 2.4 Event MPM,托管在 Digital Ocean 上。
什么可能导致这些挂起,我该如何解决这个问题?