W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
在Todd Lipcon的演示中,使用MemStore-Local Allocation Buffers避免使用完整的GC(http://www.slideshare.net/cloudera/hbase-hug-presentation),描述了HBase中常見(jiàn)的兩種停止垃圾收集的情況,特別是在加載過(guò)程中;CMS故障模式和和老一代堆碎片帶來(lái)的。
要解決第一個(gè)問(wèn)題,請(qǐng)通過(guò)添加-XX:CMSInitiatingOccupancyFraction默認(rèn)值并將其設(shè)置為默認(rèn)值來(lái)啟動(dòng)早于默認(rèn)值的CMS 。從60%或70%開(kāi)始(降低閾值,完成的GCing越多,使用的CPU越多)。
為了解決第二個(gè)碎片問(wèn)題,Todd補(bǔ)充實(shí)驗(yàn)設(shè)施(MSLAB,全稱是 MemStore-Local Allocation Buffer),必須在Apache HBase 0.90.x明確啟用(它默認(rèn)是在Apache HBase 0.92.x的)。在你的Configuration中設(shè)置hbase.hregion.memstore.mslab.enabled為true。最新的JVM更好地考慮碎片,因此請(qǐng)確保您運(yùn)行的是最新版本。在消息中讀出,識(shí)別由碎片引起的并發(fā)模式故障。請(qǐng)注意,啟用后,每個(gè)MemStore實(shí)例將至少占用一個(gè)MSLAB內(nèi)存實(shí)例。如果您有數(shù)千個(gè)區(qū)域或許多區(qū)域,每個(gè)區(qū)域都有許多列族,那么MSLAB的這種分配可能會(huì)負(fù)責(zé)堆分配的很大一部分,并且在極端情況下會(huì)導(dǎo)致OOME。在這種情況下禁用MSLAB,或者降低它使用的內(nèi)存量,或者減少每個(gè)服務(wù)器的區(qū)域。
如果您的工作負(fù)載很大,請(qǐng)查看HBASE-8163 MemStoreChunkPool:使用MSLAB時(shí)對(duì)JAVA GC的改進(jìn)(https://issues.apache.org/jira/browse/HBASE-8163)。它描述了在寫入負(fù)載期間降低Young代GC數(shù)量的配置。
如果你沒(méi)有安裝HBASE-8163,和你想提高你的Young代GC時(shí)間,那么需要考慮的一個(gè)技巧是在hbase-env.sh中設(shè)置GC配置-XX:PretenureSizeThreshold,讓它的大小比hbase.hregion.memstore.mslab.chunksize的大小要小一些,所以MSLAB分配直接發(fā)生在tenured空間而不是Young代。你這樣做是因?yàn)檫@些MSLAB分配無(wú)論如何都可能使它成為Old代,而不是在eden空間中承受來(lái)自s0和s1之間的復(fù)制的代價(jià),然后在MSLAB取得了足夠的tenure后,從Young代復(fù)制到Old代,這節(jié)省了一點(diǎn)YGC流失并直接分配到Old代。
還要考慮啟用堆外塊緩存。這已被證明可以緩解GC暫停時(shí)間。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: