我有一台运行 CentOS 5、MySQL 5.1 和 PHP 5.2 的服务器。我遇到了一个问题,不知道该从哪里开始排查。似乎在流量高峰期,Apache 偶尔会在检索请求的网页时出现延迟(或超时)。基本上,我访问一个页面,它只是挂在获取该页面的位置。
但问题是,之后我可以毫无问题地访问 100 个页面,因此很难重复。我认为原因是配置不当,导致无法同时连接足够的 Apache 或 MySQL。
您能否给我一些建议,让我可以进行测试以尝试排除一些可能的原因?
答案1
您可以查看以下几件事:
- 检查低负载和高负载时的输出
top
。在低负载时查看输出,了解一切运行正常时的情况,并将其与高负载统计数据进行比较。查看以下内容:内存消耗、CPU 使用率、IO 使用率、哪些进程正在使用内存/CPU、是否有任何进程处于“不间断睡眠”状态(统计数据列中的“D”)。 - 用于
netstat
查看在高负载时间内是否收到大量传入请求。查找具有相同 IP 的大量连接。 free
,vmstat
并iostat
可以为您提供有关内存和 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 等待另一个进程超时/死亡并启动一个新进程所花费的时间。
-肖恩