2010-07-19 76 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版本開始,此選項默認爲開啓。

相關問題