要不要也来分享分享一下啊

es7.4.2 新生代和老年代内存比例分配问题,不是默认的比例1:2?

Elasticsearch | 作者 caokegege | 发布于2020年07月15日 | 阅读数:3541

版本:es7.4.2
JDK:1.8
描述:修改了conf/jvm.options , 指定了 -Xms30g -Xmx30g 没有设置过新生代的大小。这里感觉应该是使用默认的 1:2 。
问题:使用jstat -gccapacity 发现 新生代只有大约1G的空间。 查看启动参数中,并没有指定xmn的大小,也没有使用 -XX:NewRatio 指定比例
 
jstat -gccapacity 31666
NGCMN    NGCMX     NGC     S0C   S1C       EC      OGCMN      OGCMX       OGC         OC       MCMN     MCMX      MC     CCSMN    CCSMX     CCSC    YGC    FGC
1107520.0 1107520.0 1107520.0 110720.0 110720.0 886080.0 30349760.0 30349760.0 30349760.0 30349760.0      0.0 1144832.0 110948.0      0.0 1048576.0  15636.0 6421672 44508
 
启动命令:
/usr/java/jdk1.8.0_181/bin/java -Xms30g -Xmx30g -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=75 -XX:+UseCMSInitiatingOccupancyOnly -Des.networkaddress.cache.ttl=60 -Des.networkaddress.cache.negative.ttl=10 -XX:+AlwaysPreTouch -Xss1m -Djava.awt.headless=true -Dfile.encoding=UTF-8 -Djna.nosys=true -XX:-OmitStackTraceInFastThrow -Dio.netty.noUnsafe=true -Dio.netty.noKeySetOptimization=true -Dio.netty.recycler.maxCapacityPerThread=0 -Dio.netty.allocator.numDirectArenas=0 -Dlog4j.shutdownHookEnabled=false -Dlog4j2.disable.jmx=true -Djava.io.tmpdir=/tmp/elasticsearch-5047660292130073929 -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=data -XX:ErrorFile=logs/hs_err_pid%p.log -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintTenuringDistribution -XX:+PrintGCApplicationStoppedTime -Xloggc:logs/gc.log -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=32 -XX:GCLogFileSize=64m -Dio.netty.allocator.type=pooled -XX:MaxDirectMemorySize=16106127360 -Des.path.home=/tol/htdocs/elasticsearch-742-prome -Des.path.conf=/tol/htdocs/elasticsearch-742-prome/config -Des.distribution.flavor=default -Des.distribution.type=tar -Des.bundled_jdk=true -cp /tol/htdocs/elasticsearch-742-prome/lib/* org.elasticsearch.bootstrap.Elasticsearch -d
已邀请:

caokegege

赞同来自:

查到原因了,没有设置 xmn 和 XX:NewRatio 的情况下,新生代和老年代的比例会有一个算法。取决于并行处理的线程数。
与cpu的核心数有关,当cpu小于8的时候,这个数是 cpu 核数。
大于8的时候是 (8+(n-8)*5/8) 得到 m
然后用这个数 64M* m(上面计算的值)*13/10 得到一个大小 K
然后用 K 和 1/3*堆大小 取 Min
因为我的机器是 16C,so 最后我的新生代大小在 1G 左右
建议大家还是用 XX:NewRatio 指定的好

Charele - Cisco4321

赞同来自:

除了-xmx,-xms以外,其它缺省就好。等有了问题才去看。
因为你跟本不知道你这些费力的设置是不是有效。

要回复问题请先登录注册