2010-07-19 89 views
0

Passenger如何决定何时分叉一个新进程,并且可以以任何有意义的方式配置它应该处理多少个进程(除了配置中的“智能”和“保守”标志?)或者,有没有办法调试为什么在Phusion下运行的Rails应用程序会突然冻结?Phusion Passenger不总是用Rails阻塞?

背景:

我使用Phusion客运与Apache2的服务器,并且在大多数情况下,事情做得很好。我更少关心加载,更关心阻塞:如果命中一个很长的控制器方法(比如睡眠10秒钟的方法),那么普通的杂种会捆绑整个应用程序,并且不能提供其他网页直到该方法已完成。通过Passenger,我可以使用同样的方法,并且仍然打开一个新的浏览器,并且可以更快地加载同一个应用程序的页面,而不会造成任何问题。

有时候。

而且“有时”是一个问题。如果一个方法需要足够长的时间(在我的情况,这是否一去不复返外部网络的呼叫),整个应用程序将再次挂起,即使所有的漂亮线分叉,或任何..

我的理解是, Passenger的工作方式是每次需要时都会分离出全新的轨道实例,通常是在一次连接太多人的情况下。

它似乎可以用很长的方法,虽然...但我看不到任何如何或为什么(或更重要的是,如何调整或配置此过程)的参考。甚至如何弄清楚问题可能是什么(我是否需要让Phusion脱离更多的线程,它是否在一段时间内不能使用很长的方法?)

回答

0

每当请求进入Phusion Passenger决定将请求转发到哪个进程并将该进程标记为繁忙。一旦该过程完成处理请求,它将被标记为非繁忙。

如果所有现有进程都标记为繁忙,则Phusion Passenger会产生一个新进程,除非达到MaxPoolSize限制,在这种情况下,它将等待进程变为非繁忙。

你想要自定义什么? “冻结”到底是什么意思?你是否指的是“缓慢的杂种队列问题”? Phusion Passenger有一项名为Global Queuing的功能可以解决这个问题。该问题及其解决方案是Phusion Passenger手册中的documented extensively,自3.0.0版本开始,此选项默认为开启。