我有一个小型的 Rackspace 托管 Debian VPS,运行我的个人网络服务器。在过去的几周里,Apache(我运行的是 2.2.16)似乎无限期地挂起好几次了。重新启动 Apache 可以/etc/init.d/apache2 restart
解决问题,直到它再次发生。因此,我很确定这不是 DNS 或虚拟目录配置的问题(自从发生这种情况之前,这些配置都没有改变过)。
有时,只有涉及 PHP 和 MySQL 的动态页面会受到影响,静态 HTML 页面加载速度很慢;其他时候,所有页面都会无限期挂起,直到我重新启动 Apache。如果我在 Chrome 中打开一个选项卡,挂起一段时间后,它可能会出错并出现 ERR_CONNECTION_ABORTED;如果我重新启动 Apache,它会停止加载并出现 ERR_CONNECTION_RESET。
除了网络爬虫寻找不存在的文件外,没有其他内容/var/log/apache2/error.log
。起初我以为是 RAM 问题(256 MB,我很抠门,但流量每天大约几百次点击,主要是网络爬虫),但交换空间远未用满,Apache 进程处于空闲状态,虽然可用内存很少,但在 Apache 重启后加载几个页面后,内存大致相同。工作时性能可以接受,我只需要找出导致它在正常运行几天后挂起的原因。
我尝试减少 MaxClients 并增加 MaxRequestsPerChild,但这没有帮助:
<IfModule mpm_prefork_module>
StartServers 2
- MinSpareServers 2
- MaxSpareServers 4
- MaxClients 10
- MaxRequestsPerChild 200
+ MinSpareServers 1
+ MaxSpareServers 2
+ MaxClients 4
+ MaxRequestsPerChild 2000
</IfModule>
(这些设置,包括新的和旧的,并且基于谷歌搜索 - 关于如何进行合理配置存在大量相互矛盾的信息。)
你知道我该如何弄清楚发生了什么吗?哪里是寻找潜在死锁的好地方?
附带问题:由于 VPS 本身没有问题,是否有一些我可以在本地运行的 cronjob,当 Apache 开始出现故障时会提醒我?(我不需要像 Pingdom 这样的重量级异地监控服务。)