hbase默认内存为1g,官方文档中明确地指出这是无法支撑长时间正常运行的,是肯定要引发zookeeper会话超时事件,从而导致服务退出的。 文档中给出了4个不怎么有用的建议: 加大内存(但不告诉加多少,反正是越多越好)确保不要使用交换分区(可我的硬盘是ssd
hbase默认内存为1g,官方文档中明确地指出这是无法支撑长时间正常运行的,是肯定要引发zookeeper会话超时事件,从而导致服务退出的。
文档中给出了4个不怎么有用的建议:
加大内存(但不告诉加多少,反正是越多越好)确保不要使用交换分区(可我的硬盘是ssd,比内存慢不了多少)确保有空闲的cpu(cpu很少怎么办?)延长zookeeper超时等待时间(这个有点用,适当延长无害)既然是jvm回收内存引发的事件,就优化jvm参数来解决吧!以默认1g内存为例。
设置xmn值为150m:
export hbase_opts=-xmn150m
设置gc参数:
export server_gc_opts=-xx:cmsinitiatingoccupancyfraction=80 -xx:+useparnewgc -xx:+useconcmarksweepgc
解释一下:
-xmn150m 年轻代大小为150m
-xx:cmsinitiatingoccupancyfraction=80 年老代使用了80%时回收内存
( 1 - 年轻代150m / ( 总内存1000m - 年轻代150m ) ) * 100 = 82.35 > 80
确保了在回收时有余量执行此时出现的任务
-xx:+useparnewgc:设置年轻代为并发回收
-xx:+useconcmarksweepgc:设置年老代为并发回收
这样就能保证在硬件资源范围内最大限度地支撑正常运行,赶快试试吧!
