Автоматически устанавливать размер кучи Java для ElasticSearch в Linux
Я пытаюсь автоматически установить размер кучи на моих узлах ElasticSearch v5.6.3 (Ubuntu 16)
Машины размещены в Azure, и я хочу сделать это так, чтобы при масштабировании машины он автоматически устанавливал размер кучи на соответствующий уровень без необходимости вручную открывать файл /etc/elasticsearch/jvm.options и устанавливать его и затем перезапустите сервис.
Насколько я могу понять, предлагаются способы установки размера кучи (в ElasticSearch 5):
- В файле jvm.options
- через переменную окружения ES_JAVA_OPTS.
Следовательно, если я запускаю скрипт для установки ES_JAVA_OPTS при запуске до запуска службы asticsearch.
Я пробовал много вещей, чтобы попытаться установить ES_JAVA_OPTS, но, просматривая журналы, я вижу, что он использует значение по умолчанию.
Я пробовал разные вещи:
- отредактируйте скрипт /etc/init.d/elasticsearch и переустановите сервис
- отредактировав asticsearch-systemd-pre-exec для установки переменной.
- Установка переменной в rc.local
В конце я поместил скрипт в init.d и использовал уровень запуска, чтобы выполнить его первым.
Сценарий обновляет файл jvm.options, используя sed следующим образом:
#!/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 таким же образом, но это не сработало.
Моя конечная цель - облегчить расширение.