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

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

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

这些机器托管在 Azure 上,我想这样做,以便当我扩大机器规模时,它会自动将堆大小设置为适当的级别,而无需手动打开 /etc/elasticsearch/jvm.options 文件并进行设置,然后重新启动服务。

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

  1. 在 jvm.options 文件中
  2. 通过 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,但没有效果。

我的最终目标是让扩大规模变得更容易。

相关内容