在Linux上自动为ElasticSearch设置Java堆大小

我正试图在ElasticSearch v5.6.3节点(Ubuntu 16)上自动设置堆大小,

这些计算机托pipe在Azure上,我希望这样做,以便在扩展计算机时自动将堆大小设置为适当的级别,而无需手动打开/etc/elasticsearch/jvm.options文件并将其设置为然后重新启动服务。

据我所知,build议的方法来设置堆大小(在ElasticSearch 5中)是:

  1. 在jvm.options文件中
  2. 通过ES_JAVA_OPTS环境variables。

因此,如果在弹性search服务启动之前运行脚本来设置ES_JAVA_OPTS,

我尝试了很多东西来试图设置ES_JAVA_OPTS,但是在查看日志时,我可以看到它使用了默认值。

我尝试了各种各样的东西:

  • 编辑/etc/init.d/elasticsearch脚本并重新安装服务
  • 编辑elasticsearch-systemd-pre-exec来设置variables。
  • 在rc.local中设置variables

最后,我在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,但它不起作用。

我的最终目标是使扩展更容易。