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