成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Ruby on Rails性能優化七劍

開發 前端 后端
文章介紹了Ruby on rails性能優化的7個做法,目前在整個Rails社區,都極少有運營Rails大訪問量網站經驗的人詳細的談“性能”這個話題。

Ruby on Rails(也叫做Rails)是一個針對支持數據庫的Internet應用程序的Ruby框架,在51CTO之前報道的文章《進入Ruby on Rails世界》與《Ruby on Rails的核心特性是什么?》里,都對其作了詳細的介紹,這里將不做過多的說明,文章的主旨在于如何做好Ruby on Rails的性能優化。

51CTO推薦專題:Ruby on Rails開發教程

目前在整個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

主流的選擇是Apache 2.2,lighttpd,litespeed。Apache 2.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和內存資源的使用狀況。

五、應用程序

1、避免使用component

2、hash的key使用symbol

3、對于ORM來說,數據庫的表設計的原則是顆粒度應該小一些,把常用字段和不常用字段盡量分離到不同表,嚴重影響性能的大字段分離到單獨的表

4、在不使用對象緩存的情況下,查詢方法的:include可以預加載關聯對象,避免n+1問題

六、緩存

1、Rails的頁面緩存,Action緩存和片斷緩存

Rails提供的緩存方式可以有效降低對應用服務器的負載,但是緩存顆粒度太粗,適應范圍比較狹窄,緩存過期的處理比較煩瑣。

2、對象緩存

Rails應用本身是可以水平擴展的,性能瓶頸往往還是數據庫訪問,使用CachedModel對象緩存可以有效降低數據庫負載,但CachedModel不像Hibernate二級緩存那么強大,不能夠針對非主鍵查詢進行緩存讀取,不能針對非主鍵查詢進行緩存填充,和file-column有沖突,需要自行覆蓋model對象的save方法等等。另外在使用對象緩存的情況下,應該把查詢方法的:include去掉,避免關聯查詢無法利用緩存的現象。

3、查詢緩存

對于統計類耗時查詢,如果不要求實時性,那么可以使用memcache-client將查詢結果緩存到memcached里面。

七、Session的存儲方式

由于Linux文件系統的高效性以及操作系統使用內存來做disk cache,因此默認使用硬盤文件保存session,并不會帶來性能瓶頸,使用memcached并不會提高多少IO性能。如果一定要優化session硬盤讀取,除了memcached,可以使用RAMDISK。

【編輯推薦】

  1. Ruby on Rails的核心特性是什么?
  2. Ruby on Rails能否成為主流?
  3. 一個Java程序員的Ruby on Rails體驗
  4. 進入Ruby on Rails世界
  5. 最詳細的Ruby on Rails安裝步驟
責任編輯:王曉東 來源: ddvip.com
相關推薦

2009-12-16 15:23:33

Ruby on rai

2015-10-14 17:27:18

性能

2015-10-10 11:00:05

RubyRails性能

2009-12-16 15:14:43

Ruby on Rai

2009-08-27 10:21:22

Ruby on Rai

2009-12-16 17:07:27

Ruby on Rai

2009-12-16 17:50:58

Ruby on Rai

2009-08-06 09:13:36

Ruby on Rai

2009-12-18 11:14:26

Ruby On Rai

2009-12-14 15:30:43

安裝Ruby on R

2009-12-17 14:29:50

Ruby on Rai

2009-12-16 16:37:59

Ruby on Rai

2009-12-16 15:41:10

Ruby on Rai

2009-12-16 17:37:31

Ruby on Rai

2009-12-17 17:37:42

Ruby on Rai

2010-09-25 14:39:29

Bruce Tate

2009-01-20 14:19:25

Rails 2.3RubyMerb-Rails

2013-03-28 12:42:02

RubyRails

2009-09-29 17:04:29

2009-12-16 16:24:00

Ruby on Rai
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 91精品国产综合久久久久久丝袜 | 成人免费视频网站在线看 | 伊人久久综合 | 国外成人在线视频网站 | 成人国产精品久久 | 99精品网 | 999国产精品视频 | 成人免费视频在线观看 | 亚洲五码在线 | 国产人免费人成免费视频 | 色视频一区二区 | 精品麻豆剧传媒av国产九九九 | www.男人天堂.com | 国产精品二区三区在线观看 | 亚洲午夜av久久乱码 | 日韩播放 | 美女天天操 | 久久久久久久久中文字幕 | 国产精品亚洲综合 | 成人精品毛片国产亚洲av十九禁 | 日韩专区中文字幕 | 日本欧美国产在线观看 | 久草成人网 | 日韩在线视频免费观看 | 精品成人免费一区二区在线播放 | 二区三区av | 久久精品国产清自在天天线 | 亚洲一区二区精品视频 | 国产精品久久久久久久久久久久久 | 久久久精品网站 | 久久国产精品72免费观看 | 日韩三区 | 亚洲国产精品久久久 | 亚洲精品99 | www.一区二区| av电影一区二区 | 91精品国产高清一区二区三区 | 激情五月综合 | 日本三级在线网站 | 日韩成人高清在线 | 777zyz色资源站在线观看 |