为什么Passenger下的Rails应用程序偶尔会停下来?

我有一个Rails 2.3.2应用程序在Passenger上运行,最近,最奇怪的事情已经开始发生。

每隔一段时间,应用程序就会完全停止处理请求,他们将全部备份,直到他们超时。 重新启动Apache似乎是唯一的出路。 系统处于相对较轻的负载下,直到发生这种情况为止,此时根本没有任何负载。

我意识到这不是很多,但我怎么才能弄清楚是什么原因造成的呢? 值得注意的是,全局排队是打开的; Ruby是ruby-enterprise-1.8.6-20080610; Passenger是上述Ruby Enterprise Edition附带的版本。

我发现一个有用的资源是Passenger用户指南的一部分 ,他们谈论这个问题:

如果其中一个应用程序实例被冻结(停止响应),则可以通过用SIGABRT将其冻结,从而找出它的冻结位置。 这将导致应用程序引发exception,并带有回溯。

它可能是代码中的东西? 什么等待input阻塞线程,并导致多个进程只是等待?

既然你不知道是什么导致了这个问题,我想你应该确保你至lesslogging了一切。 崩溃前的最后几个日志条目可以揭示你的罪魁祸首。

这个问题可能是代码中的东西。 那么,要知道,你可以部署一个非常简单的Rails应用程序,所以代码不会是一个问题,但具有完全相同的设置(apache + passenger + REE),并通过一个小ruby脚本在一夜之间发送请求。 在你的个人电脑上运行它,看看它是否崩溃。 当然,你必须确定你已经以完全相同的方式设置你的环境。

也可能是内存不足,但这取决于您的应用程序和系统的具体情况。 这个职位想到。 您可能想要尝试修改REE的内存pipe理设置,如在post中所描述的,看看它是否解决了这个问题(在任何情况下都不会受到伤害)。

如果你还没有,我build议在stackoverflo上发布这个问题。

我有同样的事情,我曾经主持过几个rails 1.2.3应用程序使用apache + fastcgi一年没有一次崩溃,然后我切换到一个新的服务器与apache +乘客,他们随机崩溃。 Apache只是停止响应。

我一直在使用monit来保存它,到目前为止,我的答案是用nginx而不是apache迁移到新的服务器(虚拟),以及最新的乘客和rubyee。 到现在为止还挺好!

Apache服务器仍然崩溃,现在它只能服务于一个杂种站点,所以我会假设它与Apache或我的具体configuration的一些问题。 给nginx一个去,如果你可以:)

另一个可能的答案是:RMagick已经知道会导致乘客和智能产卵的问题。

这个来自Passenger邮件列表的线程有更多的信息:

看起来这个问题在稀土元素20090113中可能已经被修正了,但是我觉得这个问题发生的更加频繁。 今天早上,我在Centos 4 64位上发现了一个冻结过程,运行乘客2.0.6和REE 20090113。