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