Как изменить максимальный размер памяти Elasticsearch

У меня есть сервер Apache со стандартной конфигурацией Elasticsearch, и все работает отлично, за исключением того, что конфигурация по умолчанию имеет максимальный размер 1 ГБ.

У меня нет такого большого количества документов для хранения в Elasticsearch, поэтому я хочу уменьшить память.

Я видел, что мне нужно изменить параметр -Xmx в конфигурации Java, но я не знаю, как это сделать.

Я видел, что могу выполнить это:

bin/ElasticSearch -Xmx=2G -Xms=2G

Но когда мне нужно перезагрузить Elasticsearch, это будет потеряно.

Можно ли изменить максимальное использование памяти, когда Elasticsearch установлен как служба?

Ответ 1

Обновлено 24 ноября 2016 г.: Elasticsearch 5, по-видимому, изменил способ настройки JVM. См. этот ответ здесь. Ответ ниже по-прежнему применяется к версиям < 5.

tirdadc, спасибо, что указали это в своем комментарии ниже.


У меня есть страница pastebin, которую я разделяю с другими, когда задаюсь вопросом о памяти и ES. Для меня это работало нормально: http://pastebin.com/mNUGQCLY. Я также вложу содержимое здесь:

Литература:

https://github.com/grigorescu/Brownian/wiki/ElasticSearch-Configuration http://www.elasticsearch.org/guide/reference/setup/installation/

Отредактируйте следующие файлы, чтобы изменить ограничения на количество файлов и номеров файлов. Эти инструкции предполагают Ubuntu 10.04, могут работать на более поздних версиях и других дистрибутивах/операционных системах. ( Изменить: это работает и для Ubuntu 14.04.)

/etc/security/limits.conf

elasticsearch - nofile 65535
elasticsearch - memlock unlimited

/etc/default/elasticsearch (на CentOS/RH:/etc/sysconfig/elasticsearch):

ES_HEAP_SIZE=512m
MAX_OPEN_FILES=65535
MAX_LOCKED_MEMORY=unlimited

/etc/elasticsearch/elasticsearch.yml

bootstrap.mlockall: true

Ответ 2

В ElasticSearch 5 документация изменилась, что означает, что ни один из вышеперечисленных ответов не работал у меня.

Я попытался изменить ES_HEAP_SIZE в /etc/default/elasticsearch и в etc/init.d/elasticsearch, но когда я запустил ps aux | grep elasticsearch, результат все еще показывал:

/usr/bin/java -Xms2g -Xmx2g # aka 2G min and max ram

Мне пришлось внести следующие изменения:

/etc/elasticsearch/jvm.options

# Xms represents the initial size of total heap space
# Xmx represents the maximum size of total heap space

-Xms1g 
-Xmx1g 
# the settings shipped with ES 5 were: -Xms2g
# the settings shipped with ES 5 were: -Xmx2g

Ответ 3

Для тех, кто хочет сделать это на Centos 7 или с другой системой, работающей с SystemD, вы меняете ее в

/etc/sysconfig/elasticsearch 

Раскомментируйте строку ES_HEAP_SIZE и установите значение, например:

# Heap Size (defaults to 256m min, 1g max)
ES_HEAP_SIZE=16g

(Игнорировать комментарий о 1g max - это значение по умолчанию)

Ответ 4

Предыдущие ответы были недостаточными в моем случае, вероятно, потому, что я на Debian 8, в то время как они были связаны с некоторым предыдущим распределением.

В Debian 8 измените службу script, как правило, разместите в /usr/lib/systemd/system/elasticsearch.service и добавьте Environment=ES_HEAP_SIZE=8G чуть ниже других строк "Окружающая среда = *".

Теперь перезагрузите службу script с помощью systemctl daemon-reload и перезапустите службу. Работа должна быть выполнена!

Ответ 5

Если вы используете служебную оболочку, предоставленную в репозитории Elasticsearch Github, найденную в https://github.com/elasticsearch/elasticsearch-servicewrapper, то файл conf в элементе управления elasticsearch-servicewrapper/service/elasticsearch.conf памяти. В верхней части elasticsearch.conf указан параметр:

set.default.ES_HEAP_SIZE=1024

Просто снимите этот параметр, скажем, "set.default.ES_HEAP_SIZE = 512", чтобы уменьшить выделенную память Elasticsearch.

Обратите внимание, что если вы используете обертку elasticsearch, ES_HEAP_SIZE, указанную в elasticsearch.conf, ОВЕРРИДАЕТ ВСЕ ДРУГИЕ НАСТРОЙКИ. Мне это показалось немного сообразить, поскольку из документации казалось, что память кучи может быть установлена ​​из elasticsearch.yml.

Если настройки вашей обертки сервиса установлены где-то в другом месте, например, в /etc/default/elasticsearch, как в примере с Джеймсом, установите там ES_HEAP_SIZE.

Ответ 6

Инструкции для ubuntu 14.04:

sudo vim /etc/init.d/elasticsearch

Set

ES_HEAP_SIZE=512m

затем в:

sudo vim /etc/elasticsearch/elasticsearch.yml

Set:

bootstrap.memory_lock: true

В файлах есть комментарии для получения дополнительной информации

Ответ 7

Если вы установили ES, используя пакеты RPM/DEB, как предусмотрено (как вам кажется), вы можете настроить это, отредактировав init script (/etc/init.d/elasticsearch на RHEL/CentOS). Если вы посмотрите в файле, вы увидите блок со следующим:

export ES_HEAP_SIZE
export ES_HEAP_NEWSIZE
export ES_DIRECT_SIZE
export ES_JAVA_OPTS
export JAVA_HOME

Чтобы настроить размер, просто измените строку ES_HEAP_SIZE на следующее:

export ES_HEAP_SIZE=xM/xG

(где x - количество MB/GB ОЗУ, которое вы хотели бы выделить)

Пример:

export ES_HEAP_SIZE=1G

Выделил бы 1 ГБ.

После редактирования script, сохранения и выхода, перезапустите службу. Вы можете проверить, правильно ли он установлен, выполнив следующее:

ps aux | grep elasticsearch

И проверка флагов -Xms и -Xmx в возвращаемом java-процессе:

/usr/bin/java -Xms1G -Xmx1G

Надеюсь, что это поможет:)

Ответ 8

Если вы используете сервер Windows, вы можете изменить переменную среды, перезапустить сервер, чтобы применить новое значение среды и запустить Elastic Service. Подробнее в Установить Elastic в Windows Server

Ответ 9

В пути elasticsearch home dir, т.е. обычно /usr/share/elasticsearch, Существует файл конфигурации bin/elasticsearch.in.sh. Измените параметр ES_MIN_MEM, ES_MAX_MEM в этом файле, чтобы изменить -Xms2g, -Xmx4g соответственно. И убедитесь, что вы перезапустили node после этого изменения конфигурации.