hbase java 垃圾回收_[HBase调优]--RegionServer 的JVM 垃圾回收优化

本文介绍了为何HMaster不需要调整垃圾回收,重点解析了RegionServer由于写入负载导致的JVM垃圾回收问题。通过详细阐述JRE的启发式算法,说明RegionServer为何需要定制化调整。文章讨论了新生代和老生代的特点,提供了RegionServer的JVM配置示例,包括使用ParallelGC和CMS回收器的考量,以及CMS的触发占用比。最后,对比了串行、并行和并发收集器的适用场景。
摘要由CSDN通过智能技术生成

感谢原文链接:https://blog.csdn.net/lihui6636/article/details/42040619

1、为何HMaster一般不需调整垃圾回收机制

HMaster 没有处理过重的负载,并且实际的数据服务不经过 HMaster,所以垃圾回收时 HMaster 通常不会产生问题。

2、描述JRE的启发式算法

JRE 在默认情况下会按照一般情况下来估计程序在做什么、怎么创建对象、如何分配堆内存处理数据,这些假设在多数情况下都是对的。JRE能够运用启发式算法,根据运行进程的状况进行调整。设置当启发式的学习调整受限于具体实现时候,JRE 也能够更好地处理某些特殊情况。

3、为何需要调整RegionServer 的垃圾回收机制

JRE的默认算法和启发式学习调整功能不能很好地处理RegionServer。当RegionServer 在写入量过大的负载时候,繁重的负载使得JRE通过对程序行为的各种假设进行内存分配的策略不再有效。

在RegionServer写入数据时,数据会先保存在memstore 中,当大于阈值时候,再写入到磁盘。因为写入的数据是由客户端在不同时间写入的,故而他们占据的Java堆空间很可能是不连续的,会出现孔洞。

4、RegionServer的新生代和老生代的特点比较

新生代大小在128M~512M;老生代大小在几GB。

最初写入的数据会保存在新生代,再刷写到磁盘;当数据刷写到磁盘的速度较慢时候,新生代中的数据停留时间过长,会被移到老生代。

新生代空间可以被迅速回收,对内存管理没有影响;老生代数据量大,回收慢,对内存管理影响大。所以二者需要不同的垃圾回收策略。

5、RegionServer 的JVM 配置解读

-Xmx8g -Xms8g -Xmn128M -XX:+UseParNewGC -XX:+UseConMarkSweepGC -XX:CMSInitiatingOccupancyFraction=70 -verbose:gc -XLoggc:/logs/gc-hostname.log

其中:

-Xmx8g           最大堆内存8g

-Xms8g           初始堆内存设置与最大堆内存一样大。如果Xms设置得比较小,当遇到数据量较大时候,堆内存会迅速增长,当上升到最大又会回落,伸缩堆大小会带来压力。

-Xmn128M      新生代128M。新生代不能过小,否则新生代中的生存周期较长的数据会过早移到老生代,引起老生代产生大量内存碎片;新生代也不能过大,否则回收新生代也会造成太长的时间停顿,影响性能。

-XX:+UseParNewGC   新生代采用 ParallelGC回收器。ParallelGC将停止运行Java 进程去清空新生代堆,因为新生代很小,所以停顿的时间也很短,需几百毫秒。

-XX:+UseConMarkSweepGC 老生代采用CMS回收器(Concurrent Mark-Sweep Collector) .  CMS在不停止运行Java进程的情况下异步地完成垃圾回收,CMS会增加CPU的负载,但是可以避免重写老生代堆碎片时候的停顿。老生代回收不可使用 ParallelGC  回收机制,因为老生代的堆空间大,ParallelGC会造成Java进程长时间停顿,使得RegionServer与ZooKeeper的会话超时,该RegionServer会被误认为已经奔溃并会被抛弃。

-XX:CMSInitiatingOccupancyFraction=70     初始占用比为70%的时候开始CMS回收。此值不能太小,否则CMS发生得太频繁。此值不能太大,否则因为CMS需要额外堆内存,会发生堆内存空间不足,导致CMS 失败。

-verbose:gc -XLoggc:/logs/gc-hostname.log写入日志

6、串行收集器(Serial Collector)、并行收集器(Parallel Collector)、并发标记清理收集器(CMS)

串行收集器(Serial Collector)-XX:+UseSerialGC

Serial Collector使用单线程处理所有垃圾回收工作,因为无需多线程交互,所以效率比较高。但是,也无法使用多处理器的优势,所以Serial Collector 适合单处理器机器。当然,此收集器也可以用在小数据量( 100M ]左右)情况下的多处理器机器上。

并行收集器(Parallel Collector) -XX:+UseParallelGC    -XX:+UseParallelNewGC  -XX:+UseParallelOldGC

多条垃圾收集线程并行,此时用户线程是没有运行的.

--适用情况:“对吞吐量有高要求”,多CPU、对应用响应时间无要求的中、大型应用。举例:后台处理、科学计算。

--缺点:应用响应时间可能较长

并发标记清理收集器(CMS)   XX:+UseConcMarkSweepGC

用户线程与垃圾收集线程并发执行,程序在继续运行,而垃圾收集程序运行于另一个个CPU上.

可以保证大部分工作都并发进行(应用不停止),垃圾回收只暂停很少的时间,此收集器适合对响应时间要求比较高的中、大规模应用。使用-XX:+UseConcMarkSweepGC 打开。

-适用情况:“对响应时间有高要求”,多CPU、对应用响应时间有较高要求的中、大型应用。举例:Web服务器/应用服务器、电信交换、集成开发环境。

--缺点:需要消耗更多资源,吞吐量没那么大

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值