hbase入库过程中,除了hbase-site.xml中的一些常见的配置参数,其实很关键的一个环节是hbase-env.sh中的jvm参数配置。之前修改的一个重要参数就是新生代的大小。
在大规模写入数据的试验中,我们分别将每个Regionserver的新生代内存配置为不同大小(总大小为32GB),入库一段时间后,通过jstat命令查看每台机器的三个运行状态,YGC,FGC,GCT,绘制出以下性能图形:(横轴为新生代内存配置大小,纵轴分别为三个参数的实际取值,GCT单位秒,YGC,FGC单位为次)
对于图中所显示的,yong gc次数随着新生代内存的增加显著下降,而fullGC也略为下降,总的GC时间在下降后又回升,4的位置达到最低点。
由于进行海里数据入库时,RegionServer端的内存只是作为memstore来缓存和组织数据,最终大部分的数据都还是要刷到硬盘上。所以就决定了这种场景下内存中的旧有对象需要被尽快释放。而新生代是最适合存放这些临时性对象,能够很快被minor gc回收。不过并不是新生代越大越好用,如果新生代过大,虽然gc的yong gc的频度下降,不过消耗的时间相应也上升。所以,依据试验中GCT最小的情况来选择一个合理的参数是比较适合的。