【发布时间】:2017-09-02 04:03:31
【问题描述】:
这就是我配置 jvm.options 的方式(我还重新启动了 elasticsearch)
cat /etc/elasticsearch/jvm.options
## JVM configuration
-Xms4096m
-Xmx4096m
-XX:+UseConcMarkSweepGC
-XX:CMSInitiatingOccupancyFraction=75
-XX:+UseCMSInitiatingOccupancyOnly
-XX:+DisableExplicitGC
-XX:+AlwaysPreTouch
-server
-Djava.awt.headless=true
-Dfile.encoding=UTF-8
-Djna.nosys=true
-Dio.netty.noUnsafe=true
-Dio.netty.noKeySetOptimization=true
-Dlog4j.shutdownHookEnabled=false
-Dlog4j2.disable.jmx=true
-Dlog4j.skipJansi=true
-XX:+HeapDumpOnOutOfMemoryError
但是当我检查我的堆大小时,我发现它设置为 2gigs?
java -XX:+PrintFlagsFinal -version | grep -iE 'HeapSize|PermSize|ThreadStackSize'
intx CompilerThreadStackSize = 0 {pd product}
uintx ErgoHeapSizeLimit = 0 {product}
uintx HeapSizePerGCThread = 87241520 {product}
uintx InitialHeapSize := 125829120 {product}
uintx LargePageHeapSizeThreshold = 134217728 {product}
uintx MaxHeapSize := 1998585856 {product}
intx ThreadStackSize = 1024 {pd product}
intx VMThreadStackSize = 1024 {pd product}
openjdk version "1.8.0_121"
为什么最初的堆大小不同,它们应该是相同的。
【问题讨论】:
-
执行
java -XX:+PrintFlagsFinal不会给你 es 的最终标志,而是一个新启动的 jvm 实例,它对 jvm 选项文件一无所知。 -
如何确认 ES 使用了正确的堆大小?
-
如果你可以看到它的日志(stdout),添加
XX:+PrintFlagsFinal到你的jvm.options应该在es启动时打印它们。或者可能:stackoverflow.com/questions/5317152/… -
"jps -lvm" 做到了!谢谢。我能够确认它实际上是以我配置的堆大小运行的。
-
您可以将 jps -lvm 标记为答案以便我接受吗?这 100% 回答了我的问题
标签: java elasticsearch centos jvm elastic-stack