我试图在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以管理员身份运行,但这并没有帮助。这似乎是一个普遍的问题,但是答案是有限的,没有一个对我有用。
编辑 我在具有相同Java和ES版本的Ubuntu 18服务器上运行Elasticsearch。
ES设置为:
-Xms1g
-Xmx1g
并且jvm的MaxHeapSize = 1056309248(1GB)。而且工作正常。
我不明白Windows安装为何要求3GB的堆大小以及jvm无法提供的大小。
答案 0 :(得分:1)
documentation表示环境变量名称应为ES_JAVA_OPTS
。
您也可以不使用它,而是依靠默认的最大堆大小(在您的情况下为〜8GB)(可用内存的1/4)。