悟空,拿我的打狗棒来

ES JVM young区和old区内存分配的问题

Elasticsearch | 作者 wudingmei1024 | 发布于2019年03月26日 | 阅读数:5222

ES 版本 : 6.1.3
JVM配置:
-Xms31g -Xmx31g 
-XX:+UseConcMarkSweepGC
-XX:CMSInitiatingOccupancyFraction=75
-XX:+UseCMSInitiatingOccupancyOnly
查看GC日志如下:
[2019-03-20T07:07:02,769][WARN ][elasticsearch[EsNode4][scheduler][T#1]][o.e.m.j.JvmGcMonitorService] [EsNode4@68.29.246.43] [gc][113142] overhead, spent [1.6s] collecting in the last [2.9s]
[2019-03-20T07:09:38,066][WARN ][elasticsearch[EsNode4][scheduler][T#1]][o.e.m.j.JvmGcMonitorService] [EsNode4@68.29.246.43] [gc][young][113296][1480] duration [1.1s], collections [1]/[2.1s], total [1.1s]/[36.4m], memory [16.8gb]->[14.6gb]/[30.6gb], all_pools {[young] [2.4gb]->[19.1mb]/[2.4gb]}{[survivor] [316.1mb]->[261.9mb]/[316.1mb]}{[old] [14.1gb]->[14.3gb]/[27.9gb]}
发现young区的内存分配只有2.4G,而old区内存分配有27.9G。
 
所以,问题:
 
young区和old区的内存是怎样分配的,可不可以提高young区的内存,使得持续写入的场景下,GC频率降低?
 
已邀请:

hapjin

赞同来自: wudingmei1024

默认情况下(老年代回收使用CMS,新生代回收使用ParNewGC),新生代的内存分配就只有那么大,是正常的。
你可以用  jmap -heap pid 看看JVM堆配置信息,MaxNewSize 估计就只有那么大。–XX:NewRatio 默认是2。具体可参考我的这篇回复
 
可以调整新生代的内存大小,改JVM配置就好了。
 
 

kepmoving - 90后

赞同来自:

通过–XX:NewRatio参数分配young和old的比例

要回复问题请先登录注册