regionserver发生full gc导致宕机

我使用的hbase版本是hbase-0.98.6-cdh5.2.0
近期hbase的regionserver偶尔会挂掉,查看日志会出现以下内容:
561771595.jpg

 
我的hbase的gc配置如下
export HBASE_REGIONSERVER_OPTS="-Xms64g -Xmx64g -XX:PermSize=256m -XX:MaxPermSize=256m -XX:+UseG1GC -server -XX:+DisableExplicitGC  -XX:+UseFastAccessorMethods -XX:SoftRefLRUPolicyMSPerMB=0 -XX:G1ReservePercent=15 -XX:InitiatingHeapOccupancyPercent=40 -XX:ConcGCThreads=18 -XX:+ParallelRefProcEnabled -XX:-ResizePLAB -XX:ParallelGCThreads=18 -XX:+PrintClassHistogram -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintHeapAtGC -Xloggc:/home/q/hbase/hbase-0.98.6-cdh5.2.0/logs/gc-$(hostname)-hbase.log"
 
gc的日志如下

2017-07-10T15:18:23.034+0800: 18068942.472: [Full GC 62G->60G(64G), 28.6072150 secs] [Eden: 32.0M(3168.0M)->0.0B(3264.0M) Survivors: 96.0M->0.0B Heap: 62.5G(64.0G)->60.2G(64.0G)] Heap after GC invocations=1044709 (full 10): garbage-first heap total 67108864K, used 63087998K [0x00007eed50000000, 0x00007efd50000000, 0x00007efd50000000) region size 32768K, 0 young (0K), 0 survivors (0K) compacting perm gen total 262144K, used 46533K [0x00007efd50000000, 0x00007efd60000000, 0x00007efd60000000) the space 262144K, 17% used [0x00007efd50000000, 0x00007efd52d71410, 0x00007efd52d71600, 0x00007efd60000000) No shared spaces configured. } [Times: user=40.32 sys=0.14, real=28.61 secs]
 
请教一下是什么原因造成呢,或者有什么排查思路
 
已邀请:

openinx - HBase Committer @小米

赞同来自:

Heap: 62.5G(64.0G)->60.2G(64.0G) 做了一次full gc之后,你的堆仍然使用了60G,说明你使用的内存本身就很多?
 
另外,你能否上传一份完整的gc.log到系统 ? (gc.log里面没有hbase的相关信息,应该不会暴露公司隐私)
 
单看这一次full gc, 很难看出是什么问题...

openinx - HBase Committer @小米

赞同来自: qgxiaozhan

另外,我看到你gc参数可以做的一些比较常见的改进就是:
1.  把下面的打gc log的参数加上,否则到了出问题的时候,不太好分析gc日志. 
-verbose:gc 
-XX:+PrintGC
-XX:+PrintGCDetails
-XX:+PrintGCApplicationStoppedTime
-XX:+PrintHeapAtGC
-XX:+PrintGCDateStamps
-XX:+PrintAdaptiveSizePolicy
-XX:+PrintTenuringDistribution
-XX:+PrintSafepointStatistics
-XX:PrintSafepointStatisticsCount=1
-XX:PrintFLSStatistics=1
2. g1gc没有配置MaxGCPauseMillis参数,这个参数用来控制gc时间不超过多少时间,默认是18446744073709551615,如果g1不配置这个参数的话,用g1就没有意义了.换句话说,就是你是容许任何一次gc 的时间为任意时长的..
 
3. G1HeapRegionSize 这个参数,你没设,默认是0, 我不确定是什么效果..
 
4. 这里大致说了下小米这边g1的配置情况,你可以参考下:
http://hbase-help.com/?/question/19
 
 

congcongDBA

赞同来自:

完整gc的日志具体查看附件
 

qgxiaozhan

赞同来自:

HBase的具体配置是什么,cache和memstore怎么配置的?挂的时候,请求大不?

openinx - HBase Committer @小米

赞同来自:

 话说你这个集群有多少个regionserver ? 平均下来每个region server有大概多少write qps ? 我看了下gc日志,发现你第5次full gc之后,内存基本上就没有降低到50g以下,这个很恐怖,说明内存再怎么回收,也用了50g的内存,短期内使无法回收了..后面就开始一直full gc了.

qgxiaozhan

赞同来自:

这么大量的写,感觉可以尝试一下配置memstore Chunk,减少一下碎片。

要回复问题请先登录注册