2014-02-13 42 views
3

我對Ruby web應用程序(來自java)非常陌生。 我有VPS,有1個CPU和2GB的內存,並希望玩一些鐵軌/ sinatra的東西。1 CPU上的Ruby機架應用程序 - 我應該運行多少個進程?

我正在使用Ruby 2.1.0 MRI CPU的數量如何映射到我需要運行的Web服務器進程的數量?我使用美洲獅作爲網絡服務器,並設置了默認線程(0,16)。但我注意到,還有「工人」選項可以讓另一個進程更好地處理多個請求。

我是否正確理解對於這樣的設置(1個CPU),運行2個Web服務器進程沒有意義?唯一合理的設置是1個線程進程?

回答

2

哦,現在這是一個很大的問題!

進程和線程的數量不一定與CPU的數量相關聯。這更多的是可用內存的數量,併發請求的數量以及正在發生的'鎖定'的數量。

如果您打算長時間運行阻止其他請求的請求,那麼擁有其他進程可以提供幫助。您仍然可以使用單個CPU擁有多個進程。

Ruby中有許多不同的服務器可以以不同的方式處理擴展,Unicorn,Puma和Thin都是其中的一部分。在Unicorn vs Puma vs Thin上搜索可以找到關於該主題的一些有用的博客文章。

這裏有一對夫婦

http://ylan.segal-family.com/blog/2012/08/20/better-performance-on-heroku-thins-vs-unicorn-vs-puma/ https://www.engineyard.com/articles/rails-server https://www.ruby-forum.com/topic/1822610

而且在Ruby中 http://merbist.com/2011/02/22/concurrency-in-ruby-explained/

的TL上併發的一些信息:DR的答案是,這取決於!

+0

謝謝。在過去的幾天裏,我讀過幾篇文章/比較等。我沒有完全通過一些進程來獲得這個東西。我在Puma網站上閱讀: 「在提供本機線程的ruby實現中,您應該調整此編號以匹配可用內核的數量。」 所以我明白,如果我有1個CPU,那麼在分叉新過程中沒有意義。我對嗎? – grafthez

+0

另外,如果我理解正確的事情是,如果我有IO操作(數據庫讀取,文件讀取,外部API調用)ruby切換線程,並讓其他線程在等待IO時執行其工作。所以看起來典型的Web應用程序應該沒問題,只有1個工作者(進程),但內部有一些線程(例如,帶有16個線程的Puma)。或者我錯過了什麼? – grafthez

+0

這裏是關於性能的另一篇文章http://blog.wiemann.name/rails-server 與併發有關的任何問題都是沒有真正簡單的答案。這篇文章解釋了一個'測試'併發請求的策略,但在一天結束時,您確實需要根據您的負載情況調整個人使用情況。什麼可能適用於一個應用程序很多緩慢爬行。 – muttonlamb

相關問題