乘客如何决定何时分叉一个新流程,我是否可以以任何有意义的方式配置它应该处理多少进程(配置中的“智能”和“保守”标志除外)?或者,有什么方法来调试在Phusion下运行的rails应用程序为什么会突然冻结呢?
背景:
我在Apache2服务器上使用Phusion乘客,而且在大多数情况下,一切都很好。我不太关心加载,而更关心的是阻塞:如果普通的mongrel碰到一个长控制器方法(比方说,一种睡眠时间为10秒的方法),那么普通的mongrel就会将整个应用程序捆绑在一起,在这个方法完成之前,没有其他网页可以使用。与乘客,我可以点击相同的方法,仍然打开一个新的浏览器,并点击更快的加载页面的同一应用程序没有任何问题。
有时候。
这“有时”是个问题。如果一个方法花费足够长的时间(在我的例子中,一个外部网络调用永远不会回来),整个应用程序将再次挂起,即使所有的线程分叉,或其他什么。
我的理解是,乘客的工作方式是,每次需要的时候,它都会把所有新的铁路实例分开,通常是在太多人同时连接的情况下。
它似乎适用于长方法,though...but我看不到任何关于如何或为什么(或者更重要的是,如何调整或配置这个过程)的引用。或者如何解决这个问题(我是否需要让Phusion分叉出更多的线程,它只是在一定时间内不适用于长的方法?)
发布于 2010-09-20 11:02:57
每当请求出现时,Phusion乘客决定将请求转发到哪个进程,并将该过程标记为繁忙。一旦该进程完成处理请求,它将被标记为非繁忙。
如果所有现有进程都被标记为繁忙,那么Phusion客运将生成一个新的进程,除非达到MaxPoolSize限制,在这种情况下,它将等待一个进程变得非繁忙。
你到底想定制什么?你所说的“冻结”到底是什么意思?您是指“慢Mongrel队列问题”吗?Phusion乘客有一个名为“全球排队”的功能,可以解决这个问题。问题以及它的解决方案是在Phusion乘客手册中的详细记录,并且由于版本3.0.0 beta,这个选项是默认打开的。
https://stackoverflow.com/questions/3284140
复制相似问题