为什么一个 apache2 虚拟主机很慢而另一个却不慢?

为什么一个 apache2 虚拟主机很慢而另一个却不慢?

我在 Ubuntu 10.04 上运行 apache2 2.2.14。我有两个虚拟服务器正在运行,它们都使用 sites-available 中几乎相同的 conf 脚本。其中一个页面 (robertsmetrology.krazycraig.com) 渲染速度超快 (1 秒 F5 即可渲染 index.html),完全没有问题。第二个页面 (robertsmetrology2.krazycraig.com) 渲染时间太长 (18 秒 F5 即可渲染 index.html)。与代码相反,在 Frontpage 中开发的快速加载站点需要运行大量脚本。第二个站点没有脚本,只有 HTML5 和 CSS3。我使用 zoneedit 作为两个站点的 DNS 服务器,区域记录完全相同。我查看了访问和错误日​​志以及消息,甚至更改了虚拟服务器要调试的 apache2 LogLevel 变量。我已进行过 W3C 验证,网站加载缓慢的唯一问题是无效的元标记和锚标记的 href 属性中的 &(而不是 & amp;)(例如 href="http://whatever.com?a=1&b=2")。修复这些问题后,页面渲染速度没有变化。两个页面都使用相同的图像和文本,唯一真正的区别是渲染缓慢的页面是 HTML5,使用 article、header 和 footer 等标记,而另一个页面到处使用 div 和表格格式。

我很困惑为什么一个页面渲染速度这么慢,而另一个页面渲染速度却这么快。有人能告诉我如何调试这个问题吗?

感谢您的帮助。

编辑:所以我认为文件中可能存在导致渲染缓慢的问题。为了检查这一点,我将我的 index.html 替换为如下所示的 index.html...

<!DOCTYPE html>
<html>
  <head>
  </head>
  <body>
    test
  </body>
</html>

渲染仍需3秒以上。

答案1

在 Chromium 或 Chrome 中,您可以转到开发者工具并选择网络选项,查看加载每个资源需要多长时间。通常,当页面加载缓慢时,是因为浏览器正在尝试访问服务器上找不到的内容,或者正在访问其他服务器上的内容。

答案2

我发现一个问题,即 apache2 在达到最大同时连接数后会开始排队请求。该问题只发生在一个拥有大量同时连接的虚拟主机上。

要了解您是否已达到此限制,首先通过运行以下命令找出您正在使用的 MPM:

apachectl -V

检查您的 MPM 有哪些可用设置以及它们在您的服务器上的设置。这可能位于 httpd.conf 或类似文件中,具体取决于您的设置。如果您的 MPM 未设置任何内容,那么您将使用默认值。

接下来,查看您正在使用的 MPM 的 Apache 文档。例如,如果您在 Apache 2.2 上运行 worker MPM,请访问https://httpd.apache.org/docs/2.2/mod/worker.html. 仔细阅读设置并查看最大同时连接数。

如果 mod_status 未启用,请尝试启用它,但确保公众无法访问。根据需要将 your_ip_address 替换为白名单中的 IP 地址或主机名。这将需要重新启动 apache。

<Location /server-status>
SetHandler server-status
Order deny,allow
Deny from all
Allow from your_ip_address_or_host_name
</Location> 

然后当你访问http://your.server/服务器状态(如果您使用 TLS,则可能需要 https)您将看到有多少请求正在同时处理。如果已达到最大值,请考虑调整 MPM 设置以满足服务器的需求。

相关内容