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