優化hbase JVM GC 引數,避免由於JVM記憶體回收引發的ZooKeeper會話超時程序退出事件
阿新 • • 發佈:2019-02-02
hbase預設記憶體為1G,官方文件中明確地指出這是無法支撐長時間正常執行的,是肯定要引發ZooKeeper會話超時事件,從而導致服務退出的。
文件中給出了4個不怎麼有用的建議:
- 加大記憶體(但不告訴加多少,反正是越多越好)
- 確保不要使用交換分割槽(可我的硬碟是SSD,比記憶體慢不了多少)
- 確保有空閒的CPU(CPU很少怎麼辦?)
- 延長ZooKeeper超時等待時間(這個有點用,適當延長無害)
既然是JVM回收記憶體引發的事件,就優化JVM引數來解決吧!以預設1G記憶體為例。
設定Xmn值為150M:
export HBASE_OPTS="-Xmn150m"
設定GC引數:
export SERVER_GC_OPTS="-XX:CMSInitiatingOccupancyFraction=80 -XX:+UseParNewGC -XX:+UseConcMarkSweepGC"
解釋一下:
-Xmn150m 年輕代大小為150M
"-XX:CMSInitiatingOccupancyFraction=80 年老代使用了80%時回收記憶體
( 1 - 年輕代150M / ( 總記憶體1000M - 年輕代150M ) ) * 100 = 82.35 > 80
確保了在回收時有餘量執行此時出現的任務
-XX:+UseParNewGC:設定年輕代為併發回收
-XX:+UseConcMarkSweepGC:設定年老代為併發回收
這樣就能保證在硬體資源範圍內最大限度地支撐正常執行,趕快試試吧!