开发者社区 > 大数据与机器学习 > 检索分析服务 Elasticsearch版 > 正文

Elasticsearch没有设置任何置新生代和老年代,有人知道这个是为什么吗?

Elasticsearch没有设置任何置新生代和老年代,按理说应该按照默认的8:2:1的比例,但是很快,查看内存发现新生代是 900M arthas查看的

使用的是CMS垃圾回收器,经过百度发现

Eden 区的大小通常由 JVM 的堆内存分配策略和应用程序的内存需求来决定。Elasticsearch 在其默认配置中会根据 JVM 的堆内存大小自动计算堆内存的各个区域的大小,包括 Eden 区、Survivor 区和老年代。默认情况下,Elasticsearch 使用 G1 垃圾回收器,它会根据堆内存大小自动调整这些区域的大小。

但是我尝试修改 -Xms 和 -Xmx两个参数,无论是设置20G还是16G,尝试降低和增加,这个900M都是不动的,就非常的诡异。

后来显示的设置
-XX:NewSize=6G
-XX:MaxNewSize=6G

这个才发生变化,有人知道这个是为什么吗?/usr/jdk64/jdk1.8.0_112/bin/java -Xms31g -Xmx31g -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 -Dlog4j.shutdownHookEnabled=false -Dlog4j2.disable.jmx=true -Djava.io.tmpdir=/tmp/elasticsearch-1060148110909776643 -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 -Des.path.home=/usr/hdp/current/elasticsearch_client -Des.path.conf=/usr/hdp/current/elasticsearch_client/config -Des.distribution.flavor=default -Des.distribution.type=tar -cp /usr/hdp/current/elasticsearch_client/lib/* org.elasticsearch.bootstrap.Elasticsearch -p /usr/hdp/current/elasticsearch_client/elasticsearch.pid

展开
收起
真的很搞笑 2023-10-04 07:42:41 205 0
1 条回答
写回答
取消 提交回答
  • Elasticsearch没有设置任何置新生代和老年代的原因可能是以下几点:

    • 使用的是CMS垃圾回收器,而不是G1垃圾回收器。CMS垃圾回收器不会根据堆内存大小自动调整新生代和老年代的大小,而是使用默认的比例或者手动指定的参数。
    • 没有指定-XX:NewRatio参数,该参数用于设置新生代和老年代的比例。如果不指定该参数,CMS垃圾回收器会使用默认的比例,即2:1。
    • 没有指定-XX:SurvivorRatio参数,该参数用于设置Eden区和Survivor区的比例。如果不指定该参数,CMS垃圾回收器会使用默认的比例,即8:1。

    因此,看到的新生代是900M可能是因为堆内存大小是31G,按照默认的比例2:1分配给新生代和老年代,那么新生代就是10.33G,然后按照默认的比例8:1分配给Eden区和Survivor区,那么Eden区就是9.29G,Survivor区就是0.52G。由于Survivor区有两个,所以新生代中可用的空间就是9.29G+0.52G=9.81G,约等于900M。

    2023-10-20 15:37:11
    赞同 1 展开评论 打赏

阿里云检索分析服务Elasticsearch版兼容开源ELK功能,免运维全托管,提升企业数据检索与运维分析能力。

相关产品

  • 检索分析服务 Elasticsearch版
  • 热门讨论

    热门文章

    相关电子书

    更多
    阿里云Elasticsearch体系架构与特性解析 立即下载
    开源与云:Elasticsearch应用剖析 立即下载
    《Elasticsearch全观测解决方案》 立即下载