ruby on rails應用效能最佳化之道

來源:互聯網
上載者:User

這是一篇我們運營JavaEye網站將近半年時間所得到經驗的總結。目前在整個rails社區,都極少有運營rails大訪問量網站經驗的人詳細的談這個話題。至於國內,rails應用都停留在學習和嘗試階段,真正投入商業運營的基本找不到,所以談這個話題為時太早,頗有對牛彈琴的感覺。所以權當是個人的總結性文章吧,也不會很詳細的展開談論,能對大家有所啟發就好。

一、硬體

1、CPU

ruby解析器相對於JVM,PHP解析器來說,比較低效,可能會導致比較多的context switch,因此提高CPU和記憶體之間的匯流排頻寬和傳輸速度會對ruby應用有比較大的效能提升。在目前主流的x86_64 CPU當中,AMD Opteron在CPU晶片內建記憶體控制器,可以有效提高CPU和記憶體資料交換速度,提高context switch能力。所以用AMD Opteron比Intel Xeon EM64T效能要好很多。

2、實體記憶體

ruby是以進程方式啟動並執行,rails應用的並發響應能力主要取決於ruby進程的數量。一個最簡單的rails應用,一個ruby進程佔用的實體記憶體一般不過30-40MB,但是對於真正複雜的,而且資料庫訪問頻繁,資料量大的rails應用來說,ruby進程穩定的實體記憶體佔用至少100多MB,經常達到200多MB,甚至300MB。以開10個ruby進程計算,那麼實體記憶體使用上限就是3GB,所以4GB實體記憶體是起碼的。

二、作業系統

1、Linux distro

對於AMD x86_64的CPU來說,SLES要比RHEL有更多的最佳化。

2、32位版本還是64位版本

應該使用64位版本作業系統,以充分發揮x86_64 CPU的效能,並且x86_64的Linux很多Kernel參數也大很多,代價就是需要更多的實體記憶體。所以記憶體多多益善。

3、檔案系統

rails會對每個瀏覽器會話在硬碟產生session檔案,一個繁忙的網站,臨時檔案目錄下面有上萬乃至幾萬個session檔案是很常見的現象。對於這種目錄下面幾萬個小檔案的存取,reiserfs要比ext3效能好很多倍。

三、Web Server

主流的選擇是apache2.2,lighttpd,litespeed。apache2.2可以首先排除,lighttpd和litespeed都不錯,但我會選擇開源免費的lighttpd。至於lighttpd的各種最佳化參數這裡不談。

四、ruby的部署

1、ruby GC

可以使用railsbench提供的GC patch,以最佳化ruby記憶體使用量,降低GC頻率,提高throughput,代價就是ruby進程的實體記憶體佔用加倍。所以實體記憶體越多越好,4G根本不夠用,8G,16G絕對不嫌多。

2、FCGI還是mongrel

ruby進程可以以FCGI方式來運行,以FastCGI協議和Web Server通訊,也可以以HTTP Server方式來運行(即Mongrel),以HTTP協議和Web Server通訊,這兩種方式效能上沒有什麼差異。FCGI方式,在單機上面通過Unix Socket和Web Server通訊,效率比走TCP Port要高。

3、開多少個ruby進程

ruby進程數量和web server的connection數量的比例沒有定規,少了多了都會降低效能,要靠實踐去摸索,也要參考CPU和記憶體資源的使用狀況。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.