hbase 查询设置超时_hbase master挂掉-zookeeper连接超时原因
并行運(yùn)行hbase刪表,建表操作,多個(gè)表多個(gè)region,導(dǎo)致hbase掛掉。查看日志:
從日志中可以看出GC時(shí)間過長導(dǎo)致zookeeper連接超時(shí),master退出。(是master退出而不是regionserver退出是因?yàn)檫M(jìn)行的操作是建表,刪表,是由master來進(jìn)行操作的)。
原因:
hbase中和GC相關(guān)的參數(shù):
修改前(默認(rèn)):
export HBASE_OPTS="$HBASE_OPTS -ea -verbose:gc
-Xloggc:$HBASE_LOG_DIR/hbase.gc.log
-XX:ErrorFile=$HBASE_LOG_DIR/hs_err_pid.log -XX:+PrintGCTimeStamps
-XX:+PrintGCDetails -XX:+HeapDumpOnOutOfMemoryError-XX:+UseConcMarkSweepGC -XX:+CMSIncrementalMode"
咨詢開發(fā)修改后:
export HBASE_OPTS="$HBASE_OPTS -verbose:gc
-Xloggc:$HBASE_LOG_DIR/hbase.gc.log
-XX:ErrorFile=$HBASE_LOG_DIR/hs_err_pid.log -XX:+PrintGCDateStamps
-XX:+PrintGCDetails -XX:+HeapDumpOnOutOfMemoryError-XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:CMSInitiatingOccupancyFraction=70"
-XXUseConcMarkSweepGC:設(shè)置年老代為并發(fā)收集。(新老都有)
老:-XX:+CMSIncrementalMode:設(shè)置為增量模式。適用于單CPU情況。
新:-XX:+UseParNewGC:設(shè)置年輕代為并行收集。可與 CMS 收集同時(shí)使用。
-XX:CMSInitiatingOccupancyFraction=70:這個(gè)參數(shù)是我覺得產(chǎn)生最大作用的。因?yàn)樽罱K的目的是減少FULL GC,因?yàn)閒ull gc是會(huì)block其他線程的。
默認(rèn)觸發(fā)GC的時(shí)機(jī)是當(dāng)年老代內(nèi)存達(dá)到90%的時(shí)候,這個(gè)百分比由 -XX:CMSInitiatingOccupancyFraction=N 這個(gè)參數(shù)來設(shè)置。concurrent mode failed發(fā)生在這樣一個(gè)場(chǎng)景:
當(dāng)年老代內(nèi)存達(dá)到90%的時(shí)候,CMS開始進(jìn)行并發(fā)垃圾收集,于此同時(shí),新生代還在迅速不斷地晉升對(duì)象到年老代。當(dāng)年老代CMS還未完成并發(fā)標(biāo)記時(shí),年老
代滿了,悲劇就發(fā)生了。CMS因?yàn)闆]內(nèi)存可用不得不暫停mark,并觸發(fā)一次全jvm的stop the
world(掛起所有線程),然后采用單線程拷貝方式清理所有垃圾對(duì)象,也就是full
gc。而我們的bulk的最開始的操作就是各種刪表,建表頻繁的操作,就會(huì)使用掉大量master的年輕代的內(nèi)存,就會(huì)發(fā)生上面發(fā)生的場(chǎng)景,發(fā)生full
gc。
解決辦法:CMSInitiatingOccupancyFraction=70表示年老代占到約70%時(shí)就開始執(zhí)行CMS,這樣就不會(huì)出現(xiàn)(或很少出現(xiàn))Full GC了。
總結(jié)
以上是生活随笔為你收集整理的hbase 查询设置超时_hbase master挂掉-zookeeper连接超时原因的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Nginx的配置实例(反向代理准备工作)
- 下一篇: 通域消化内镜Android患者版,市中心