網(wǎng)易視頻云技術(shù)分享:HBaseGC的前生今世-身世篇

網(wǎng)易視頻云技術(shù)分享:HBaseGC的前生今世-身世篇

ID:44131819

大?。?63.70 KB

頁數(shù):8頁

時間:2019-10-18

網(wǎng)易視頻云技術(shù)分享:HBaseGC的前生今世-身世篇_第1頁
網(wǎng)易視頻云技術(shù)分享:HBaseGC的前生今世-身世篇_第2頁
網(wǎng)易視頻云技術(shù)分享:HBaseGC的前生今世-身世篇_第3頁
網(wǎng)易視頻云技術(shù)分享:HBaseGC的前生今世-身世篇_第4頁
網(wǎng)易視頻云技術(shù)分享:HBaseGC的前生今世-身世篇_第5頁
資源描述:

《網(wǎng)易視頻云技術(shù)分享:HBaseGC的前生今世-身世篇》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在工程資料-天天文庫。

1、網(wǎng)易視頻云技術(shù)分享:HBaseGC的前生今世?身世篇網(wǎng)易視頻云是網(wǎng)易傾力打造的一款基于互辻篡的分布式多媒體處理集群和專業(yè)音視頻技術(shù),提供穩(wěn)定流暢、低時延、高并發(fā)的視頻直播、錄制、存儲、轉(zhuǎn)碼及點播等音視頻的PAAS服務(wù),在線教育、遠程醫(yī)療、娛樂秀場、在線金融等各行業(yè)及企業(yè)用戶只需經(jīng)過簡單的開發(fā)即可打造在線音視頻平臺?,F(xiàn)在,網(wǎng)易視頻云的技術(shù)專家給大家分享一則技術(shù)文:HBaseGC的前生今世?身世篇。在之前的HBaseBlockCache系列文章中已經(jīng)簡單提到:使用LRUBIockCache緩存機制會因為CMSGC策略導(dǎo)致內(nèi)存碎片過多從而可能引發(fā)臭名昭著的FullGC,觸發(fā)可怕的'sto

2、p-the?world'暫停,嚴重影響上層業(yè)務(wù);而BucketCache緩存機制因為在初始化的時候就申請了一片定大小的內(nèi)存作為緩存,緩存淘汰不再由JVM管理,數(shù)據(jù)Block的緩存操作只是對這篇空間的訪問和覆蓋,因而大大減少了內(nèi)存碎片的出現(xiàn)降低了FullGC發(fā)生的頻率。那CMSGC策略如何導(dǎo)致內(nèi)存碎片過多?內(nèi)存碎片過多如何觸發(fā)FullGC?HBase在演進的道路上又如何不斷優(yōu)化CMSGC?接下來這個系列《HBaseGC的前生今生》將會為你一一揭開謎底,這個系列一共兩篇文章,本篇文章?’身世篇'將會帶你全面了解HBase的GC機制,后面一篇?1演進篇'將會給你道出HBase在發(fā)展的道路

3、上如何不斷對FullGC進行優(yōu)化。JavaGCWzK整個HBase是構(gòu)建在JVM虛擬機上的,因此了解HBase的內(nèi)存管理機制以及不同緩存機制對GC的影響,就必須對JavaGC有一個全面的了解。至于深入地理解JavaGC的工作原理,不在本文的討論范圍之內(nèi);當(dāng)然,如果已經(jīng)對JavaGC比較熟悉,也可以跳過此節(jié)。JavaGC建立在這樣一個假設(shè)基礎(chǔ)上的:大多數(shù)內(nèi)存對象要么生存周期比較短,很快就會沒人引用,比如處理RPC請求的buffer可能只會生存幾微秒;要么生存周期比較長,比如BlockCache中的熱點Block,可能就會生存幾分鐘,甚至更長時間。基于這樣的事實,JVM將整個堆內(nèi)存分為

4、兩個部分新生代(younggeneration)和老生代(tenuredgeneration),除此之外,JVM還有一個非堆內(nèi)存區(qū)?Perm區(qū),主要存放class信息以及其他meta元信息,內(nèi)存結(jié)構(gòu)如下圖所示:Ymjnr!T^nufAH,PermsoSIEden其中Young區(qū)又分為Eden區(qū)和兩個Survivor區(qū):S0和S1O—個內(nèi)存對象在創(chuàng)建之后,首先會為其在新生代申請一塊內(nèi)存空間,如果這個對象在新生代存活了很長時間,會將其遷移到老生代。在大多數(shù)對延遲敏感的業(yè)務(wù)場景下(比如HBase),建議使用如下JVM參數(shù),?XX:+UseParNewGC和XX:+UseConcMarkS

5、weepGC,其中前者表示對新生代執(zhí)行并行的垃圾回收機制,而后者表示對老生代執(zhí)行并行標(biāo)記-清除垃圾回收機制。可見,JVM允許針對不同內(nèi)存區(qū)執(zhí)行不同的GC策略。新生代GC策略_ParallelNewCollector根據(jù)上文所述,對象初始化之后會被放入Young區(qū),更具體的話應(yīng)該是Eden區(qū),當(dāng)Eden區(qū)滿了之后,會進行一次GCoGC算法會檢查所有對象的引用情況,如果某個對象還有被引用,表示該對象存活。檢查完成之后,會將這些存活的對象移到SO區(qū),并且回收整個Eden區(qū)空間,稱為一次MinorGC;接著新對象進來,又會放入Eden區(qū),滿了之后會檢查SO和Eden區(qū)存活的對象,將所有存活

6、的對象移到S1區(qū),再回收整個SO和Eden區(qū)空間;很容易理解,SO和S1兩個區(qū)總會有一個區(qū)是預(yù)留給下次存放存活對象用的。整個過程可以使用如下圖示:內(nèi)存垃圾□存活對菽第一次GC.JSEclen區(qū)満后,系狡檢囊所有的存活對欽(左圖綠色方塊),并將這些存活對氛童理之后移動刑SO區(qū)。第二次GC,SEdenEMig充滴后,系統(tǒng)栓去Eden區(qū)&S0區(qū)的所有存活對ft(左圖綠色方塊),并將這童存活對后■動到S】區(qū).這種算法稱為復(fù)制算法,對于這種算法,有兩點需要關(guān)注:1.算法會執(zhí)行'stop-the?world'暫停,但時間非常短。因為Young區(qū)通常會設(shè)置的比較?。ㄒ话悴唤ㄗh不超過512M),而

7、且JVM會啟動大量線程并發(fā)執(zhí)行,一次MinorGC—般都會在幾毫秒內(nèi)完成2.不會產(chǎn)生碎片,每次GC之后都會將存活的對象放入連續(xù)的空間(SO或S1)內(nèi)存中所有對象都會維護一個計數(shù)器,每次MinorGC移動一個對象之后,都會為這個對象的計數(shù)器加一。當(dāng)計數(shù)器增加到一定閾值之后,算法就會認為該對象生命周期很長,會將其移入老生代。該閾值可以通過JVM參數(shù)XX:MaxTenuringThreshold指定。老生代GC策略一ConcurrentMark-Sweep每次執(zhí)行Minor

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動畫的文件,查看預(yù)覽時可能會顯示錯亂或異常,文件下載后無此問題,請放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫負責(zé)整理代發(fā)布。如果您對本文檔版權(quán)有爭議請及時聯(lián)系客服。
3. 下載前請仔細閱讀文檔內(nèi)容,確認文檔內(nèi)容符合您的需求后進行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時可能由于網(wǎng)絡(luò)波動等原因無法下載或下載錯誤,付費完成后未能成功下載的用戶請聯(lián)系客服處理。