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 写入日志
串行收集器(Serial Collector) -XX:+UseSerialGC
Serial Collector使用单线程处理所有垃圾回收工作,因为无需多线程交互,所以效率比较高。但是,也无法使用多处理器的优势,所以Serial Collector 适合单处理器机器。当然,此收集器也可以用在小数据量( 100M ]左右)情况下的多处理器机器上。
多条垃圾收集线程并行,此时用户线程是没有运行的.
--适用情况:“对吞吐量有高要求”,多CPU、对应用响应时间无要求的中、大型应用。举例:后台处理、科学计算。
--缺点:应用响应时间可能较长
并发标记清理收集器(CMS) XX:+UseConcMarkSweepGC
用户线程与垃圾收集线程并发执行,程序在继续运行,而垃圾收集程序运行于另一个个CPU上.
可以保证大部分工作都并发进行(应用不停止),垃圾回收只暂停很少的时间,此收集器适合对响应时间要求比较高的中、大规模应用。使用-XX:+UseConcMarkSweepGC 打开。
-适用情况:“对响应时间有高要求”,多CPU、对应用响应时间有较高要求的中、大型应用。举例:Web服务器/应用服务器、电信交换、集成开发环境。
--缺点:需要消耗更多资源,吞吐量没那么大