版本: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
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
2 个回复
caokegege
赞同来自:
与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
赞同来自:
因为你跟本不知道你这些费力的设置是不是有效。