合理配置HBase Master与RegionServer的JVM堆内存是基础。需根据集群资源(如服务器内存大小)调整,建议为操作系统预留10%以上内存,避免内存耗尽导致系统不稳定。
HBASE_MASTER_OPTS设置堆内存(如-Xms8g -Xmx8g,即初始与最大堆内存均为8GB);HBASE_REGIONSERVER_OPTS设置更大堆内存(如-Xms32g -Xmx32g,适配高写入负载);hbase-env.sh(位于/etc/hbase/conf/目录下)。GC策略直接影响内存回收效率与系统延迟,需根据堆内存大小选择:
-XX:+UseConcMarkSweepGC启用,适合低延迟场景;-XX:+UseG1GC启用,支持更大内存且能控制最大GC暂停时间(如-XX:MaxGCPauseMillis=100,设为100毫秒);hbase-env.sh(通过HBASE_OPTS传递GC参数)。MemStore是RegionServer中缓存写入数据的内存结构,需通过以下参数控制其大小与行为,避免内存溢出:
hbase.regionserver.global.memstore.size(默认0.4,即堆内存的40%),超过阈值会触发全局 flush;hbase.regionserver.global.memstore.lower.limit(默认0.38,即堆内存的38%),低于此值会放缓 flush 速度;hbase.hregion.memstore.flush.size(默认128MB),超过则触发该Region的 flush;hbase.hregion.memstore.mslab.enabled(默认true),减少内存碎片,降低Full GC概率。BlockCache用于缓存HFile块,提升读性能,需根据业务场景(读多写少/写多读少)调整:
hfile.block.cache.size(默认0.25,即堆内存的25%),读多写少场景可增大至0.4~0.5;hbase-site.xml(位于/etc/hbase/conf/目录下)。MSLAB是HBase针对MemStore内存碎片问题的优化功能,默认开启(hbase.hregion.memstore.mslab.enabled=true)。它将MemStore内存分配到独立的缓冲区,减少内存碎片化,降低Full GC触发频率。
定期排查内存泄漏是保障长期稳定运行的关键:
jvisualvm(可视化监控JVM内存)、GCViewer(分析GC日志)、Prometheus+Grafana(实时监控内存使用与GC情况)定位内存泄漏点;-XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:/var/log/hbase/gc.log),分析GC频率与暂停时间;valgrind等工具检测代码级内存泄漏。操作系统设置对HBase内存管理有辅助作用:
vm.swappiness=0(/etc/sysctl.conf中设置)禁用Swap,避免内存不足时数据交换到磁盘导致性能骤降;