我正在尝试在 ElasticSearch v5.6.3 节点(Ubuntu 16)上自动设置堆大小
这些机器托管在 Azure 上,我想这样做,以便当我扩大机器规模时,它会自动将堆大小设置为适当的级别,而无需手动打开 /etc/elasticsearch/jvm.options 文件并进行设置,然后重新启动服务。
据我所知,设置堆大小的建议方法(在 ElasticSearch 5 中)是:
- 在 jvm.options 文件中
- 通过 ES_JAVA_OPTS 环境变量。
因此,如果我在 elasticsearch 服务启动之前运行一个脚本来在启动时设置 ES_JAVA_OPTS。
我尝试了很多方法来尝试设置 ES_JAVA_OPTS,但是查看日志时我发现它使用的是默认值。
我尝试过各种各样的方法:
- 编辑 /etc/init.d/elasticsearch 脚本并重新安装服务
- 编辑 elasticsearch-systemd-pre-exec 来设置变量。
- 在 rc.local 中设置变量
最后,我将一个脚本放在了 init.d 中,并使用运行级别首先执行了它。
该脚本使用 sed 更新 jvm.options 文件,如下所示:
#!/bin/bash
memoryInKb="$(awk '/MemTotal/ {print $2}' /proc/meminfo)"
heapSize="$(expr $memoryInKb / 1024 / 1000 / 2)"
sed -i "s/#*-Xmx[0-9]\+g/-Xmx${heapSize}g/g" /etc/elasticsearch/jvm.options
sed -i "s/#*-Xms[0-9]\+g/-Xms${heapSize}g/g" /etc/elasticsearch/jvm.options
但我认为这真的很肮脏。一定有更好的方法吗?
我尝试以相同的方式设置 ES_JAVA_OPTS,但没有效果。
我的最终目标是让扩大规模变得更容易。