欧美一区2区三区4区公司二百,国产精品婷婷午夜在线观看,自拍偷拍亚洲精品,国产美女诱惑一区二区

歡迎來到云服務(wù)器

大數(shù)據(jù)技術(shù)

HBase GC的前生當(dāng)代 – 演進(jìn)篇

HBase GC的前生當(dāng)代 – 演進(jìn)篇

中國IDC圈6月3日報(bào)道,最原始的HBase CMS GC相當(dāng)嚴(yán)重,常常會(huì)因?yàn)樗槠^多導(dǎo)致Promotion Failure,嚴(yán)重影響業(yè)務(wù)的讀寫請求。幸運(yùn)的是,HBase并沒有止步不前,許多優(yōu)化方案相繼被提出并孝敬給社區(qū),本文要先容的就是幾個(gè)較量重要的焦點(diǎn)優(yōu)化,別離是針對Memstore所作的兩個(gè)優(yōu)化:Thread-Local Allocation Buffer和MemStore Chunk Pool 以及針對BlockCache所作的優(yōu)化:BuckctCache方案。在具體先容這幾個(gè)優(yōu)化之前有須要簡樸先容一下HBase GC優(yōu)化的方針,很直觀的,第一是要只管制止長時(shí)間的Full GC,制止影響用戶的讀寫請求;第二是只管淘汰GC時(shí)間,提高讀寫機(jī)能;接著別離來看HBase針對GC所做的各類優(yōu)化:

MemStore GC優(yōu)化一 - Thread-Local Allocation Buffer

HBase數(shù)據(jù)寫入操縱實(shí)際上并沒有直接將數(shù)據(jù)寫入磁盤,而是先寫入內(nèi)存并順序?qū)懭際Log,之后期待滿意某個(gè)特定條件后統(tǒng)一將內(nèi)存中的數(shù)據(jù)刷新到磁盤。一個(gè)RegionServer凡是由多個(gè)Region構(gòu)成,每張Region凡是包括一張表的多個(gè)列族,而每個(gè)列族對應(yīng)一塊內(nèi)存區(qū)域,這塊內(nèi)存被稱為MemStore,很顯然,一個(gè)RegionServer會(huì)由多個(gè)Region組成,一個(gè)Region會(huì)由多個(gè)MemStore組成。

最原始的HBase版本存在很嚴(yán)重的內(nèi)存碎片,常常會(huì)導(dǎo)致長時(shí)間的Full GC,個(gè)中最焦點(diǎn)的問題就出在MemStore這里。因?yàn)橐粋€(gè)RegionServer由多個(gè)Region組成,差異Region的數(shù)據(jù)寫入到對應(yīng)Memstore,在JVM看來其實(shí)是殽雜在一起寫入Heap的,此時(shí)如果Region1上對應(yīng)的所有MemStore執(zhí)行落盤操縱,就會(huì)呈現(xiàn)下圖所示場景:

HBase GC的前生當(dāng)代 – 演進(jìn)篇

為了優(yōu)化這種內(nèi)存碎片大概導(dǎo)致的Full GC,HBase警惕了Arena Allocation內(nèi)存打點(diǎn)方法,,它通過順序化分派內(nèi)存、內(nèi)存數(shù)據(jù)分塊等特性使得內(nèi)存碎片越發(fā)粗粒度,有效改進(jìn)Full GC環(huán)境;

詳細(xì)實(shí)現(xiàn)道理如下:

1. 每個(gè)MemStore會(huì)實(shí)例化出來一個(gè)MemStoreLAB

2. MemStoreLAB會(huì)申請一個(gè)2M巨細(xì)的Chunk數(shù)組和一個(gè)Chunk偏移量,初始值為0

3. 當(dāng)一個(gè)KeyValue值插入MemStore后,MemStoreLAB會(huì)首先通過KeyValue.getBuffer()取得data數(shù)組,并將data數(shù)組復(fù)制到Chunk數(shù)組中,之后再將Chunk偏移量往前移動(dòng)data.length

4. 假如當(dāng)前Chunk滿了之后,再挪用new byte[ 2 * 1024 * 1024]申請一個(gè)新的Chunk

很顯然,通過申請2M巨細(xì)的Chunk可以使得內(nèi)存碎片越發(fā)粗粒度,官方在優(yōu)化前后通過配置 -xx:PrintFLSStatistics = 1 統(tǒng)計(jì)了老生代的Max Chunk Size別離隨時(shí)間的變革曲線,如下圖所示:

HBase GC的前生當(dāng)代 – 演進(jìn)篇

HBase GC的前生當(dāng)代 – 演進(jìn)篇

由上圖可以看出,未優(yōu)化前碎片會(huì)大量呈現(xiàn)導(dǎo)致頻繁的Full GC,優(yōu)化后固然依然會(huì)發(fā)生大量碎片,可是最大碎片巨細(xì)一直會(huì)維持在1e+08閣下,極大地低落了Full GC頻率。

MemStore GC優(yōu)化二  –  MemStore Chunk Pool

然而一旦一個(gè)Chunk寫滿之后,系統(tǒng)就會(huì)從頭申請一個(gè)新的Chunk,這些Chunk大部門城市顛末多次YGC之后提升到老生代,假如某個(gè)Chunk再?zèng)]有被引用就會(huì)被JVM垃圾接納。很顯然,不絕申請新的Chunk會(huì)導(dǎo)致YGC頻率不絕增多,YGC頻率增加一定會(huì)導(dǎo)致提升到老生代的Chunk增多,進(jìn)而增加CMS GC產(chǎn)生的頻率。假如這些Chunk可以或許被輪回操作,系統(tǒng)就不需要申請新的Chunk,這樣就會(huì)使得YGC頻率低落,提升到老生代的Chunk就會(huì)淘汰,CMS GC產(chǎn)生的頻率就會(huì)低落。這就是MemStore Chunk Pool的焦點(diǎn)思想,詳細(xì)實(shí)現(xiàn)如下:

1. 系統(tǒng)會(huì)建設(shè)一個(gè)Chunk Pool來打點(diǎn)所有未被引用的chunks,這些chunk就不會(huì)再被JVM看成垃圾接納掉了

2. 假如一個(gè)Chunk沒有再被引用,將其放入Chunk Pool

3. 假如當(dāng)前Chunk Pool已經(jīng)到達(dá)了容量最大值,就不會(huì)再采取新的Chunk

4. 假如需要申請新的Chunk來存儲(chǔ)KeyValue,首先從Chunk Pool中獲取,假如可以或許獲取獲得就反復(fù)操作,假如為null就從頭申請一個(gè)新的Chunk

官目的對該優(yōu)化也舉辦了簡樸的測試,利用jstat -gcutil對優(yōu)化前后的JVM GC環(huán)境舉辦了統(tǒng)計(jì),詳細(xì)的測試條件和測試功效如下所示:

測試條件:

測試功效:

HBase GC的前生當(dāng)代 – 演進(jìn)篇

很顯然,顛末優(yōu)化后YGC時(shí)間低落了40+%閣下,F(xiàn)GC的次數(shù)以實(shí)時(shí)間更是大幅下降。

BlockCache優(yōu)化 - BuckctCache方案

騰訊云代理

Copyright © 2003-2021 MFISP.COM. 國外vps服務(wù)器租用 夢飛云服務(wù)器租用 版權(quán)所有 ? 粵ICP備11019662號

主站蜘蛛池模板: 和顺县| 麦盖提县| 蒙城县| 鄂尔多斯市| 武城县| 临漳县| 雷州市| 昭觉县| 西宁市| 林西县| 潞城市| 尼玛县| 榕江县| 榆树市| 吉水县| 海兴县| 沈阳市| 临汾市| 昭平县| 诸城市| 喜德县| 石河子市| 扎鲁特旗| 阿拉善右旗| 阿城市| 建宁县| 胶南市| 泰和县| 顺昌县| 谷城县| 华阴市| 图片| 永泰县| 石棉县| 桂林市| 湖南省| 即墨市| 敖汉旗| 邛崃市| 西青区| 仲巴县|