Apache 在高流量期间请求网页出现延迟

Apache 在高流量期间请求网页出现延迟

我有一台运行 CentOS 5、MySQL 5.1 和 PHP 5.2 的服务器。我遇到了一个问题,不知道该从哪里开始排查。似乎在流量高峰期,Apache 偶尔会在检索请求的网页时出现延迟(或超时)。基本上,我访问一个页面,它只是挂在获取该页面的位置。

但问题是,之后我可以毫无问题地访问 100 个页面,因此很难重复。我认为原因是配置不当,导致无法同时连接足够的 Apache 或 MySQL。

您能否给我一些建议,让我可以进行测试以尝试排除一些可能的原因?

答案1

您可以查看以下几件事:

  • 检查低负载和高负载时的输出top。在低负载时查看输出,了解一切运行正常时的情况,并将其与高负载统计数据进行比较。查看以下内容:内存消耗、CPU 使用率、IO 使用率、哪些进程正在使用内存/CPU、是否有任何进程处于“不间断睡眠”状态(统计数据列中的“D”)。
  • 用于netstat查看在高负载时间内是否收到大量传入请求。查找具有相同 IP 的大量连接。
  • freevmstatiostat可以为您提供有关内存和 IO 的更多信息。特别要确保您没有使用任何虚拟内存。
  • 启用 Apache服务器状态并检查服务器在高负载时正在做什么。这还可以告诉您单个客户端是否行为不当(查找具有相同 IP 的多个请求)。
  • 如果可能的话,您可以尝试使用像 ApacheBench (ab) 这样的基准测试程序来测试您的网站并尝试复制该问题。
  • /var/log/检查包括 Apache、MySQL、系统日志等在内的相关日志文件,查找任何明显的错误或警告消息。

答案2

查看 httpd.conf 中的这个块

<IfModule prefork.c>
        StartServers 2
        MinSpareServers 4
        MaxSpareServers 8
        ServerLimit 75
        MaxClients 75
        MaxRequestsPerChild  1000
</IfModule>

然后在其中一个高峰期执行以下操作:

ps ax | grep httpd | wc -l 

应该为您提供正在运行的 apache 进程的数量 - 如果它接近您的服务器限制指令 - 请在 httpd.conf 中增加它。您的“滞后”听起来像是 apache 等待另一个进程超时/死亡并启动一个新进程所花费的时间。

-肖恩

相关内容