我有一个 Rails 2.3.2 应用程序在 Apache 上与 Passenger 一起运行,最近,最奇怪的事情开始发生了。
每隔一段时间,应用程序就会完全停止处理请求,它们都会备份,直到超时。重启 Apache 似乎是唯一的出路。在发生这种情况之前,系统处于相对较轻的负载下,此时它根本没有负载。
我意识到这不是很多事情要做,但我怎么能弄清楚是什么原因造成的呢?值得注意的是,全局排队是开启的;Ruby 是 ruby-enterprise-1.8.6-20080610;而Passenger是前面提到的Ruby企业版附带的版本。
我发现有用的一个资源是乘客用户指南的部分,他们在其中讨论了这一点:
它可能是代码中的东西吗?等待输入的东西阻塞了线程并导致多个进程等待?
由于您不知道导致问题的原因,我想您应该确保至少记录了所有内容。崩溃前的最后几个日志条目可能会揭示你的罪魁祸首。
问题可能出在代码中。好吧,为了找出答案,您可以部署一个非常简单的 rails 应用程序,这样代码就不会成为问题,但使用完全相同的设置(apache + 乘客 + REE),并在夜间使用一个小红宝石脚本向它发送请求。在您的个人计算机上运行它,看看它是否崩溃。当然,您必须确保以完全相同的方式设置环境。
您也可能内存不足,但这取决于您的应用程序和系统的具体情况。想到这个帖子。您可能想尝试按照帖子中的说明修改 REE 的内存管理设置,看看它是否能解决问题(无论如何尝试都不会有害)。
如果您还没有,我建议您也将这个问题发布在 stackoverflo 上。
我有同样的事情,我使用 apache + fastcgi 托管了几个 rails 1.2.3 应用程序一年没有一次崩溃,然后我切换到一个带有 apache + 乘客的新服务器,它们随机崩溃。Apache 只是停止响应。
到目前为止,我一直在使用 monit 来保存它,到目前为止,我的答案是使用 nginx 而不是 apache 以及最新的乘客和 rubyee 迁移到新的服务器(虚拟)。到目前为止,一切都很好!
apache 服务器仍然在崩溃,它现在只为一个杂种站点提供服务,所以我认为它与 apache 或我的特定配置有一些问题。如果可以的话,试试 nginx :)
另一个可能的答案:众所周知,RMagick 会导致乘客和智能生成问题。
乘客邮件列表中的这个线程有更多信息: