使用环境变量限制Elasticsearch JVM堆内存大小的问题咨询
问题原因
- 你在
elastic-docker.properties里给ES_JAVA_OPTS的值加了额外的"(双引号),Docker加载env文件时会直接把引号作为变量值的一部分传递到容器内,导致Java启动时把带引号的"-Xms2g识别成了要启动的主类,而不是JVM参数,所以触发报错。 - 额外尝试的加
.bin/my-elastic的写法不符合参数规则,ES_JAVA_OPTS是专门用来传递JVM启动参数的变量,不需要加可执行文件路径。
解决方案(优先环境变量方式)
步骤1:修改elastic-docker.properties配置
把ES_JAVA_OPTS行的双引号完全去掉,修改后完整配置如下:
discovery.type=single-node bootstrap.memory_lock=true xpack.security.enabled=true ELASTIC_USERNAME=elastic ELASTIC_PASSWORD=changeme ES_JAVA_OPTS=-Xms2g -Xmx2g
注意:-Xms(初始堆大小)和-Xmx(最大堆大小)的值建议设置为相同,避免运行时动态调整堆大小影响性能;同时堆内存最大值不要超过宿主机可用内存的50%,且单实例最高不要超过31G。
步骤2:重新启动容器
先删除原有报错的容器:
docker rm -f elastic-search
再用原有启动命令重新启动即可:
docker run --name elastic-search -d -p 9200:9200 -p 9300:9300 --env-file=elastic-docker.properties build-server/my-elastic:latest
验证配置生效
容器启动成功后执行以下命令,即可确认堆内存配置是否正确:
docker exec elastic-search curl -u elastic:changeme http://localhost:9200/_nodes/jvm?pretty
返回结果中heap_max_in_bytes字段值等于2G对应的字节数(2147483648),即说明配置生效。
内容的提问来源于stack exchange,提问作者lovrodoe
相关产品推荐
相关产品推荐

