对你们啰嗦几句,不少时候我不会去深刻了解同样东西,不少知识在脑海中有一个印象。等用到的时候才会认真仔细的来了解此内容。html
由于这个缘由,本身没有获得很好的提高。算法
最新,线上的hbase挂掉了:apache
找下日志的缘由是CMS回收时间长达60s引发的。(运行了很多时间,不知道CMS每次的回收时长都是这么大,仍是CMS使用标记-整理算法引发的时长过大,也多是CPU资源的影响)。session
Make sure you give plenty of RAM (in hbase-env.sh), the default of 1GB won’t be able to sustain long running imports.多线程
Make sure you don’t swap, the JVM never behaves well under swapping.并发
Make sure you are not CPU starving the RegionServer thread. For example, if you are running a MapReduce job using 6 CPU-intensive tasks on a machine with 4 cores, you are probably starving the RegionServer enough to create longer garbage collection pauses.app
Increase the ZooKeeper session timeouturl
记下上述事件,给本身一个思考的过程。线程
先说下本身有限的认知,如今大部分使用的方式为:日志
1-jdk1.7 默认垃圾收集器Parallel Scavenge(新生代)+Parallel Old(老年代)
2- jdk1.8 默认垃圾收集器Parallel Scavenge(新生代)+Parallel Old(老年代)
3- jdk1.9 默认垃圾收集器G1
4-ParNew(新生代)+CMS(老年代),组合回收器,hbase常常使用。
1- Serial收集器
一个单线程的收集器,如今主要应用在Client模式下的虚拟机。
2- ParNew收集器
Serial收集器的多线程版,实现了让垃圾收集线程与用户线程同时工做。
3- Parallel Scavenge收集器
使用的复制算法,支持多线程,CMS等收集器的关注点是尽量地缩短垃圾收集时用户线程的停顿时间,而parallel Scavenge目的则是达到一个可控制的吞吐量。
停顿时间越短越适合须要与用户交互的程序,,而吞吐量则是尽量高效利用CPU。加入须要回收500M的垃圾,CMS则多是每次回收100,每次2ms,总用时10ms。parallel Scavenge是一次性回收500M,用时5s。
4- Serial Old收集器
serial回收老年代版本,使用“标记-整理算法”。和serial同样主要用在Client模式下的虚拟机。
5- Parallel Old收集器
Parallel Scavenge收集器 的老年代版本,使用“标记-整理”算法。
6- CMS收集器
重视响应时间,使用的是“标记-清理算法”,为了提升程序的交互,但愿停顿时间最短。
分为四个阶段:初始标记---并发标记---从新标记---并发清除。
第一和第三个阶段须要stop-the-world。
缺点有三:1- CMS对CPU资源很是敏感,CPU资源不足时,会挤占用户线程资源;
2- CMS收集器没法处理浮动垃圾,因为并发的缘由,会出现一些持续的垃圾(称浮动垃圾),可能出现“Concurrent Mode Failure”失败而致使另外一次Full GC的产生。
3- 空间碎片,解决方法,是利用“标记-整理算法”进行清理。
7- G1收集器
基于“标记-整理算法”,相对于CMS收集器,更有利于程序长时间的运行。由于没有内存碎片。
可预测的停顿。