问题描述及原因:HBase RegionServer 发生full gc,内存不足导致
可能影响:
- 客户端读写变慢或者超时,RegionServer挂掉
处理建议:
- 追查请求变慢原因,分场景解决
场景1 RegionServer堆内内存配置太小
在EMR控制台进入“集群服务”,点击“HBase”,点击 配置管理 --> hbase-env.sh --> Heapsize
EMR默认值是1024,即1G,购买集群后需要根据业务调整,一般建议regionserver内存占用机器40%-70%左右
按业务需求和集群规划调整regionserver内存,并在业务低峰期滚动重启rs。
场景2 RS堆内内存较大,读QPS很高
若第一个场景没问题,即regionserver当前内存已经占机器内存很大一部分,并且集群的读QPS远大于写QPS,建议将读缓存存在堆外,在hbase-site.xml中加入以下两个配置项,其中缓存大小需要根据机器剩余内存来配置,一般建议一个节点上所有进程的内存和不超过节点总内存的80%,下图示例中配置的读缓存为16G
代码语言:javascript复制hbase.bucketcache.ioengine offheap
hbase.bucketcache.size 16384
业务低峰期滚动重启regionserver
场景3 RS堆内内存较大,写QPS很高
若场景1、场景2都没问题,regionserver依然full gc,同时集群的写QPS较高,可以在hbase-site.xml中加入以下配置项
代码语言:javascript复制hbase.regionserver.global.memstore.size.lower.limit 0.8
业务低峰期滚动重启rs。该配置项会降低memostore的内存占用,降低flush阈值。