我试图在我的Windows机器上运行Elasticsearch,但是收到错误,“无法创建Java虚拟机”。
Windows 10,32GB RAM,64位 JVM 1.8.0_201 Elasticsearch 6.6.1与msi安装程序一起安装,而不是作为服务安装。
Elasticsearch要求的堆大小超过3GB,所以我已经设置(并且还尝试注释掉)jvm.options:
-Xmx4096m
-Xms4096m
但后来我得到了可怕的JVM错误。我确定错误是由jvm堆大小太小引起的。所以我将环境变量_JAVA_OPTIONS设置为“-Xms512m -Xmx6144m”。
如果我跑:
java -XX:+PrintFlagsFinal -version | findstr /i "HeapSize PermSize ThreadStackSize"
我明白了:
Picked up _JAVA_OPTIONS: -Xms512m -Xmx6144m
intx CompilerThreadStackSize = 0 {pd product}
uintx ErgoHeapSizeLimit = 0 {product}
uintx HeapSizePerGCThread = 87241520 {product}
uintx InitialHeapSize := 536870912 {product}
uintx LargePageHeapSizeThreshold = 134217728 {product}
uintx MaxHeapSize := 2147483648 {product}
intx ThreadStackSize = 0 {pd product}
intx VMThreadStackSize = 0 {pd product}
java version "1.8.0_201"
Java(TM) SE Runtime Environment (build 1.8.0_201-b09)
Java HotSpot(TM) 64-Bit Server VM (build 25.201-b09, mixed mode)
你可以看到它“拾取”_JAVA_OPTIONS,但MaxHeapSize仍然是2GB左右。我也试过运行弹性搜索作为管理员并强制jvm以管理员身份运行,但这没有帮助。这似乎是一个常见问题,但答案有限,没有一个对我有用。
编辑我在Ubuntu 18服务器上运行Elasticsearch,具有相同的java和ES版本。
ES设置为:
-Xms1g
-Xmx1g
和jvm有MaxHeapSize = 1056309248(1GB)。它工作正常。
我不明白为什么Windows安装要求3GB堆大小以及为什么jvm无法提供它。
documentation说env变量名应该是ES_JAVA_OPTS
。你也可以把它放在一边,依靠默认的最大堆大小,在你的情况下应该是~8GB(可用内存的1/4)。