簡單介紹Ruby解析器性能提高方式
Ruby解析器對于編程人員在實際編程中是非常苦惱的。因為它的性能實在不能讓人恭維。但是有些情況又必須要用上。如何解決Ruby解析器性能的優化就成為了主要解決問題。#t#
Ruby解析器性能是很糟糕的,Ruby早期的主要用途是取代perl寫批量處理的腳本的,并不是為服務器應用編寫的,因此在內存分配策略上非常不適合服務器應用。
Stefans Kaes編寫了一個Ruby GC的補丁文件,在railsbench下載包里面提供了。
雖然當前Railsbench提供的GC補丁只有針對Ruby 1.8.4和1.8.5版本的,但是在Ruby 18,6上面使用1.8.5的GC補丁也完全沒有問題。
GC補丁的作用主要是針對Rails應用開大了Ruby的內存堆,可以有效提高內存堆的利用率,降低GC的頻率。
根據Stefans Kaes提供的測試數據,打補丁并且調整參數以后,GC的頻率下降到只有原來的1/10還不到。
降低GC頻率盡管并不能夠提高單個請求的執行速度,但是可以增加整體應用的負載能力。
JavaEye的服務器上也使用了GC補丁,并且根據推薦參數進行了調整。
在使用GC補丁之后,Web服務器的CPU負載下降了大概15%左右,效果非常顯著。
當然開大內存堆的代價就是Ruby進程會多消耗內存,在我們的服務器上,Ruby打補丁之后多消耗了50%左右的物理內存。