我有一台在 Debian Lenny 上运行 Apache/2.2.16 的服务器。该服务器托管大约 6 个虚拟主机。其中一个虚拟主机只是服务器的 FQDN,除了 Icinga 每 5 分钟检查一次的 index.html 页面外,没有其他内容。现在,服务器通常处于中等负载。它托管一个带有 Vbulletin 论坛部分的 Joomla 网站。它还为网站上的许多视频做一些 ffmpeg 工作。它一直很忙。现在,关键来了。Icinga 正在监控服务器的 FQDN,而不是用于提供内容的主要虚拟主机。Icinga 会定期报告 HTTP 关键问题,我将登录 icinga 并通过 telnet 或“siege --get”运行“get /”。这里发生了一件有趣的事情,我没有收到来自 Apache 的响应。没有 200 代码,什么都没有。
我的第一个假设是 Apache 被堵塞了,所以我去启动服务器上托管的其他虚拟主机。它们启动正常,但有一点延迟。我挠了挠头,然后尝试在浏览器中启动 Icinga 正在监控的 FQDN,它也能正常工作。接下来,我检查 FQDN 虚拟主机的 Apache 日志,我看到 Icinga 服务器正在访问,但错误代码为 200。我查看服务器状态,发现平均有大约 60 个请求正在处理,最多有 120 个。
我不禁认为该问题与 Apache 和 suPHP 的限制有关。最终我想采用 modPHP/APC 解决方案,但目前我必须使用 suPHP。有人见过 Icinga 监控中的此类问题吗?有人有推荐的 Apache mpm_prefork_module 配置吗?当前设置为:
ServerLimit 512
StartServers 20
MinSpareServers 20
MaxSpareServers 40
MaxClients 512
MaxRequestsPerChild 0
任何见解或观点都值得赞赏。
此外,临时解决办法是定期重启 apache,虽然这确实有效,但我确信用户会对该网站感到厌烦。