美文网首页我爱编程
HBase GC调优研究

HBase GC调优研究

作者: 水他 | 来源:发表于2017-03-23 17:50 被阅读492次

调优region server还是master

需要为region server增加参数,而master并不会是个问题,因为它并不处理大负载,数据并不通过它。调优参数只需要加到region server。

region server压力

大量的workloads导致jre支持region server并不是很好,特别是写特别重的情况。需要指定jre参数使得gc策略更适合大量的workloads。

对于写很重的情况,内存中频繁的创建和丢弃不同大小的对象。当数据收到内存buffer中,需要保持到flush达到size自后写到硬盘,new一个store file。(hbase.hregion.memstore.flush.size,或表级别的flush size,表属性或代码)
所以在写入到硬盘之前,这些数据会大量的占用Java heap。需要看是否被快速flush,则影响到数据在heap的新生代就被处理,还是会被移到老年代。

调优新生代heap

可以设置gc options在 hbase-env.sh中, HBASE_OPTS或HBASE_REGIONSERVER_OPTS。后面的只影响到region server,不会作用于master。
(-XX:MaxNewSize=128m -XX:NewSize=128m 等于 -Xmn128m)

如果新生代heap较低,可能会发现CPU load增长,因为会花费大量cpu时间用于新生代的minor gc。

输出gc log

建议输出gc的log。观察concurent mode failure或者promotion failed,将导致程序长时间停顿
(-verbose:gc -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -Xloggc:$HBASE_HOME/logs/gc-$(hostname)-hbase.log)
要注意这个log并不roll,需要定时手动处理。

GC种类

建议的GC种类:
(-XX:+UseParNewGC and -XX:+UseConcMarkSweepGC)
这里要考虑minor gc和full gc的程序停顿时间,如果超过了zk timeout,这个server会被认为lost。当gc结束了会被通知已经从集群移除,并把自己关机。
CMS会尽量避免full gc,除非出现promotion error,会导致stop world执行full gc。

CMS还有额外选项,是个百分比,控制CMS何时启动,需要避免设置导致 concurrent mode failuer。
(-XX:CMSInitiatingOccupancyFraction=70)
这个比例设为70%,略微大于region server设置的60% heap usage(默认20% block cache和40% memstore的限制)。这样CMS启动会尽量早又不会太频繁。(所以当调优block cache和memstore size时,要响应调整CMS的启动百分比。)

最佳实践例子

export HBASE_REGIONSERVER_OPTS="-Xms8g -Xmx8g -Xmn128m -XX:UseParNewGC -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=70 -verbose:gc -XX:+PrintGCDetails -XX:+PringtGCTimeStamps -Xloggc:$HBASE_HOME/logs/gc-$(hostname)-hbase.log"

关于buffer和memstore

从老年代取出buffer的数据flush到硬盘的时候,会导致老年代的内存空间留下一个非压缩的内存空间,所以规定固定大小的数据去flush,会有利于这个空间的连续利用,避免了需要压缩时导致的full gc出现。但同时也会有heap使用上的浪费,不能完全利用好所有小空间。
(hbase.hregion.memstore.mslab.enabled)默认true
(hbase.hregion.memstore.mslab.chunksize)默认2mb
(hbase.hregion.memstore.mslab.max.allocation)默认256KB,上界,超过则会直接处理,如果很多超过上界会导致更早的gc停顿。

如果仍然会有长时间的gc停顿,建议收集gc的规律,并针对性的做出server的几天或者几周的重启计划。

需要知道,buffer会比directly的KeyValue慢一些。

JAVA heap

相关文章

  • hbase gc调优(CMS与G1)

    hbase gc调优(CMS与G1) 一:hbase gc调优目的: 在HBase中,有两个在内存中的结构消费了绝...

  • HBase GC调优研究

    调优region server还是master 需要为region server增加参数,而master并不会是个...

  • JVM-GC调优

    零、本文纲要 一、 GC调优基本思路二、 新生代内存调优三、 老年代内存调优四、 GC调优案例 官方GC调优指南[...

  • 一文彻底搞懂 CMS GC 参数配置

    近期整理多个 HBase 集群的 JVM 参数,发现都是默认的 CMS GC 配置,如何调优 JVM 参数就成了一...

  • 第二十九章、GC调优思路

    以G1 GC 为例,谈谈GC调优思路? 谈到调优,这一定是针对特定场景、特定目的的事情,对于GC调优来说,首先...

  • JVM性能调优的6大步骤,及关键调优参数详解

    JVM内存调优 对JVM内存的系统级的调优主要的目的是减少GC的频率和Full GC的次数。 1.Full GC ...

  • Java架构师面试题——JVM性能调优

    JVM内存调优 对JVM内存的系统级的调优主要的目的是减少GC的频率和Full GC的次数。 1.Full GC ...

  • java-GC分析

    主要关注点: GC日志分析 调优命令 调优工具 GC日志分析 摘录GC日志一部分(前段为年轻代gc回收;后段为fu...

  • JVM GC调优入门

    JVM GC调优入门 这篇文章会介绍几个常用的调优参数,再通过两个案例介绍如何进行JVM GC调优。阅读这篇文章的...

  • 使用GCViewer调优GC

    在对 GC 调优的过程中,我们不仅需要知道 GC 的原理,更重要的是要熟练使用各种监控和分析工具,具备 GC 调优...

网友评论

    本文标题:HBase GC调优研究

    本文链接:https://www.haomeiwen.com/subject/oastottx.html