在内存限制下启动Elasticsearch5的Docker容器
请总结
当尝试从Elasticsearch5的官方镜像中启动Docker容器时,如果内存不足,它将无法启动。
可以通过在ES_JAVA_OPTS中指定Java VM的堆大小来解决这个问题。
# (例)メモリ1250M・Javaのヒープサイズ400Mの場合
docker run -m 1250m -e "ES_JAVA_OPTS=-Xms400m -Xmx400m" elasticsearch:5.3.2
請提供更多細節。
当尝试使用1250M内存启动Elasticsearch5镜像时,容器会无错误信息而崩溃。
命令为docker run -m 1250m elasticsearch:5.3.2。
使用 docker inspect 进行调查,发现其状态码为137,似乎已经崩溃。
指定文件描述符数的上限。
由于elasticsearch消耗大量的文件描述符,建议先尝试指定文件描述符数的上限。
据说默认值是64K,所以尝试使用一半的32K或者更低的16K,但并没有成功。
docker run -m 1250m –ulimit nofile=32000:32000
docker run -m 1250m –ulimit nofile=16000:16000
尝试增加容器的内存上限
考虑到可能是内存问题,尝试增加容器的内存限制并进行测试,成功启动。由于这次的环境限制在内存方面,因此需要做些调整。使用docker run -m 3000m elasticsearch:5.3.2。
指定ES_HEAP_SIZE
在搜索引擎中搜索发现,似乎可以通过名为ES_HEAP_SIZE的环境变量来指定Java虚拟机的堆大小上限。我立即尝试一下。
查看了https://www.elastic.co/guide/en/elasticsearch/reference/current/heap-size.html,发现推荐的内存大小应该是不超过总内存的一半,所以我先设置为400M。
docker run -m 1250m -e "ES_HEAP_SIZE=400m" elasticsearch:5.3.2
然后出现了这样一个错误。看起来是环境变量的名称发生了改变的错误。
Error: encountered environment variables that are no longer supported
Use jvm.options or ES_JAVA_OPTS to configure the JVM
ES_HEAP_SIZE=400m: set -Xms400m and -Xmx400m in jvm.options or add "-Xms400m -Xmx400m" to ES_JAVA_OPTS
指定 ES_JAVA_OPTS
保留错误消息,更改环境变量的指定再次尝试。
docker run -m 1250m -e "ES_JAVA_OPTS=-Xms400m -Xmx400m" elasticsearch:5.3.2
我站起来了!
最后
我确实努力了很多,但在官方参考资料中找到了答案,Elastic的产品参考资料非常准确,真棒。
https://www.elastic.co/guide/en/elasticsearch/reference/current/heap-size.html