2012-03-23 41 views
0

我有使用部署: 軌2.3.2 紅寶石1.8.7 mysql數據庫 和 3雜種實例(Windows服務)與Apache作爲負載平衡器 [我知道這是因爲升級...]雜種不使用完整的CPU功率在Windows 2003服務器

操作系統:Windows2003的

我們有很多的CPU密集型任務,當這些發生的4核機器上的雜種過程只能夠使用最高25%核心任務計劃的cpu力量。 經過多次測試後,我們注意到它只能使用單核的功能,因此在完成任務時會有時間滯後。

有一個虛擬化的建議......這在客戶端服務器上很難做到。 有沒有人對如何改善情況有任何建議?內存在這個過程中達到了250MB到1GB,但這不是一個大問題。

在此先感謝 萊納斯

回答

0

通常使用的Ruby版本(MRI或YARV,即1.8或1.9)無法同時使用多個核心。 MRI是單線程的,只是在內部提供綠色線程。 YARV使用真正的操作系統線程,但具有GIL(全局解釋器鎖),可確保一次只運行一個線程。

因此,你的mongrels無法使用多個核心(即使你將你的Rails應用程序編碼爲線程安全)。還有其他Ruby實現,比如JRuby或Rubinius,它們提供的本地線程沒有全局解釋器鎖,因此允許您的應用使用多個核心,但您可能需要稍微調整您的應用。

即使這樣,即使單個請求會在單個線程中運行,因此只能使用單個內核。但是如果沒有你處理你自己的線程(或者至少1.9的纖維),這是很難得到的,這很可能不值得這樣麻煩。

因此,一般來說,建議啓動多個應用程序服務器進程(在你的案例中的雜種)。我個人使用大約1.5 - 3每個核心(取決於應用程序)。這樣,您就可以回答許多並行請求,並充分利用它們之間共享的可用CPU功率。

+0

尊敬的Holger,謝謝您的回覆。實際上,我以爲我已經是多個服務器進程了: mongrel_rails service :: install -N myApp8010 -c「D:/ rails/myapp」-p 8010 -e production mongrel_rails service :: install -N myApp8011 -c「 D:/ rails // myapp「-p 8011 -e production mongrel_rails service :: install -N myApp8012 -c」D:/ rails/myapp「-p 8012 -e production – 2012-03-27 19:37:02

+0

有沒有辦法指定哪個進程安裝爲win服務可以安排在哪個內核上? 非常感謝 Linus – 2012-03-27 19:46:17

+0

是的,但每個進程一次只能使用一個內核。所以如果你有一個需要很長時間的請求,你會注意到這個請求只消耗一個內核的資源。在一個quadcore盒子上,你將能夠運行4個這樣的進程,而不會相互影響太多。 – 2012-03-27 19:48:38