elasticsearch在docker中的堆内存大小设置
首先查找官方文档,es默认的jvm堆内存大小是docker容器分配内存的一半。
在我机器上docker容器使用的内存上限是24.99G,es当仁不让的用掉了一半,再加上其它内存使用,便高达13G。
查看内存设置
1 | $> docker stats |
要修改它有三个方法:
设置docker容器内存上限
1
2
3
4
5
6
7
8docker run `
-d `
--name elasticsearch `
-p 127.0.0.1:9200:9200 -p 127.0.0.1:9300:9300 `
--memory="1g" `
--memory-swap="1g" `
-e "discovery.type=single-node" `
docker.elastic.co/elasticsearch/elasticsearch:7.16.2使用环境变量
这种方式会覆盖掉JVM Options,不建议使用在发布环境下。
1 | docker run \ |
- 使用jvm.options.d
在容器中放一个jvm.options
设置文件在/usr/share/elasticsearch/config/jvm.options.d
目录,设置
1 | -Xms1g |
来控制内存。
但elasticsearch的docker image没有使用服务,而是在启动时就直接运行bin/elasticsearch,所以无法重启服务让新设置生效和,需要bind mount jvm.options.d
创建新容器来达成目的。
1 | docker run ` |
注意
如果host的./jvm.options
不存在,docker会创建一个名为jvm.options
的空目录,并不会运行报错。