我需要在同一台服务器(Widows 2012 R2)上并排运行两个ElasticSearch实例(版本1.7和版本5.2.2)。当我尝试运行较新版本时,收到错误:
PS C:\Program Files\Elasticsearch\elasticsearch-5.2.2\bin> .\elasticsearch.bat
Error: encountered environment variables that are no longer supported
Use jvm.options or ES_JAVA_OPTS to configure the JVM
ES_HEAP_SIZE=8g: set -Xms8g and -Xmx8g in jvm.options or add "-Xms8g -Xmx8g" to ES_JAVA_OPTS
这是因为堆大小设置方式存在重大变化(described here)。在以前版本的ElasticSearch(1.7)中,它由环境变量设置:
ES_HEAP_SIZE = 8g
我尝试设置另一个env变量:
ES_JAVA_OPTS = -Xms8g -Xmx8g
我还通过添加
编辑了jvm.options
文件
-Xms8g
-Xmx8g
但我仍然遇到同样的错误。
有没有办法在ElasticSearch 5.2.2中配置堆大小而不删除ES_HEAP_SIZE
环境变量(我需要保持1.7版本并运行)?如果没有,是否可以在旧版本中设置堆大小,以便允许新版本运行?
答案 0 :(得分:1)
编辑:鉴于jvm.options不是一个选项,我唯一看到的是修改你的elasticsearch/bin/elasticsearch
脚本,主要是行:
ES_JAVA_OPTS="$(parse_jvm_options "$ES_JVM_OPTIONS") $ES_JAVA_OPTS" #default
于: ES_JAVA_OPTS =“ - Xms myXmsValue -Xmx myXmxValue -someOtherOptions someValue”
根据您的需要使用其他选项和值。
答案 1 :(得分:1)
这是我发现的:
事实证明,我遇到的错误不是由ElasticSearch本身引发的,而是由运行ElasticSearch(bin\elasticsearch.bat
)的批处理脚本引发的。有问题的行是:
if not "%ES_HEAP_SIZE%" == "" set bad_env_var=1
(...)
if %bad_env_var% == 1 (
echo Error: encountered environment variables that are no longer supported
echo Use jvm.options or ES_JAVA_OPTS to configure the JVM
(...)
if not "%ES_HEAP_SIZE%" == "" echo ES_HEAP_SIZE=%ES_HEAP_SIZE%: set -Xms%ES_HEAP_SIZE% and -Xmx%ES_HEAP_SIZE% in jvm.options or add "-Xms%ES_HEAP_SIZE% -Xmx%ES_HEAP_SIZE%" to ES_JAVA_OPTS
(...)
exit /b 1
)
据我所知,这个检查是为了帮助人们从旧版本迁移到更新版本,指出他们设置堆大小的新方法。除此之外,脚本中没有提到环境变量ES_HEAP_SIZE
,所以它的'存在不应该影响ElasticSearch 5.2.2实例。根据这些观察结果,最简单的修复似乎只是简单地勾勒出支票:
rem if not "%ES_HEAP_SIZE%" == "" set bad_env_var=1
我试了一下,现在ElasticSearch的两个实例都没有问题并排运行。
要避免的另一个陷阱是不在文件和ES_JAVA_OPTS
中设置堆大小,这会在部署时导致duplicate min heap size settings found
错误。只需坚持文件配置。
非常感谢@asettouf,他的回答让我找到了正确的解决方案!