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

99

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

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

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

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

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

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

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

Patxi1980
источник
Какая операционная система и версия? Версия Elasticsearch? Как вы установили Elasticsearch?
Джеймс Аддисон,
1
Возможно, вы захотите уменьшить количество реплик и осколков, поскольку их наличие при настройке с одним узлом не дает никаких преимуществ, добавьте это в /etc/elasticsearch/elasticsearch.yaml: index.number_of_shards: 1 index.number_of_replicas: 0 Таким образом вы сэкономите память и процессор, не выполняя ненужную работу. .
neo112

Ответы:

128

В 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
BigRon
источник
3
А для Elasticsearch 5.2 на Mac OS 10.12 я нашел этот файл в/usr/local/opt/elasticsearch/libexec/config/jvm.options
victorpolko
1
Я могу подтвердить, что это работает для экземпляра aws ami (установленного с помощью RPM), но сначала установите MAX_LOCKED_MEMORY = unlimited в / etc / sysconfig / elasticsearch и bootstrap.memory_lock: true в /etc/elasticsearch/elasticsearch.yml
утро
2
Это не работает в Windows - правильный ответ здесь: stackoverflow.com/questions/28798845/…
cbp
4
Для домашних установок файл находится здесь:/usr/local/etc/elasticsearch/jvm.options
Милован Зогович,
117

Обновлено 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
Джеймс Аддисон
источник
4
Выглядит хорошо. У меня также есть следующий совет относительно определения того, каким должен быть ES_HEAP_SIZE: Основное правило заключается в том, что куча ElasticSearch должна иметь около 50% доступной памяти на машине. ElasticSearch интенсивно использует системные кеши, поэтому вы должны оставить для них достаточно памяти. (от asquera.de/opensource/2012/11/25/… )
Tom
17
В CentOS я вижу, что упомянутые вами конфигурации /etc/defaultнаходятся в папке `/ etc / sysconfig '
Nishant
5
CentOS /etc/sysconfig/elasticsearch- подходящее место для внесения этих изменений. RPM даже предоставляет версию этого файла по умолчанию.
slm
5
Это больше не применимо к Elasticsearch 5, вам нужен этот ответ .
tirdadc
2
Выглядит неплохо, но я ограничил свои возможности специально для пользователя elasticsearch в/etc/security/limits.d/elasticsearch.conf
radtek
26

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

/etc/sysconfig/elasticsearch 

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

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

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


источник
Я должен добавить: я пробовал описанный выше подход на ES 1.7 на CentOS 7, и это не
помогло
1
@Jonesome не уверен, что я могу предложить - я запускаю ES 1.7.1 из пакета ES RPM на CentOS 7, и это путь, по которому существует этот файл, и изменение ES_HEAP_SIZE работает по назначению.
9

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

sudo vim /etc/init.d/elasticsearch

Устанавливать

ES_HEAP_SIZE=512m

затем в:

sudo vim /etc/elasticsearch/elasticsearch.yml

Устанавливать:

bootstrap.memory_lock: true

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

Стивен
источник
9

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

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

Теперь перезагрузите сценарий службы systemctl daemon-reloadи перезапустите службу. Работа должна быть сделана!

Claudod
источник
1
спасибо, ты спас мне день! да, это правильная процедура для Debian 8
fast2b
Нет другого места для настройки этого, кроме как изменить файл /usr/?
Мартин Шредер
6

Если вы используете служебную оболочку, предоставленную в репозитории Github Elasticsearch, которая находится по адресу 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 там.

Скотт Райс
источник
2
что, если у тебя вообще нет никаких услуг? (т.е. просто запустите bin / elasticsearch -d)
Хенли Чиу
@HenleyChiu, затем просто установите переменную среды ES_HEAP_SIZE перед ее запуском. т.е.export ES_HEAP_SIZE=1G; bin/elasticsearch -d
Андрей Регентов
В исходном файле elasticsearch.conf ES 1.7.x (установленном rpm на CentOS) вообще нет set.default. Работает ли этот подход на ES 1.7?
Jonesome Reinstate Monica
Приведенный выше ответ вводит в заблуждение. Установите ES_HEAP_SIZE в / etc / sysconfig / elasticsearch
Jonesome Reinstate Monica
6

Если вы установили ES с использованием пакетов RPM / DEB, как указано (как вам кажется), вы можете настроить это, отредактировав сценарий инициализации ( /etc/init.d/elasticsearch on 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 - количество МБ / ГБ ОЗУ, которое вы хотели бы выделить)

Пример:

export ES_HEAP_SIZE=1G

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

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

ps aux | grep elasticsearch

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

/usr/bin/java -Xms1G -Xmx1G

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

gl1tchh
источник
1
Не делай так. Это не лучшее место для таких изменений. Это гигантский взлом! Может работать, но при обновлении ES он потенциально будет удален.
slm
1
Я должен добавить: я пробовал описанный выше подход на ES 1.7 на CentOS 7, и это не помогло.
Jonesome Reinstate Monica
3
  • Elasticsearch назначит всю кучу, указанную в jvm.options, с помощью настроек Xms (минимальный размер кучи) и Xmx (максимальный размер кучи).
    • -Xmx12g
    • -Xmx12g
  • Установите минимальный размер кучи (Xms) и максимальный размер кучи (Xmx) равными друг другу.
  • Не устанавливайте для Xmx значение выше порогового значения, которое JVM использует для указателей сжатых объектов (сжатые ой), точное ограничение может быть разным, но составляет около 32 ГБ.

  • Также можно установить размер кучи через переменную среды

    • ES_JAVA_OPTS = "- Xms2g -Xmx2g" ./bin/elasticsearch
    • ES_JAVA_OPTS = "- Xms4000m -Xmx4000m" ./bin/elasticsearch
Сатьендра Шарма
источник
Также не более 50% физической оперативной памяти
Achi Even-dar
Привет, как я установил такую ​​переменную среды. Имя переменной - ES_JAVA_OPTS и значение: «-Xms2g -Xmx2g» ./bin/elasticsearch like
Manikandan
Также как я подтверждаю, размер кучи обновлен правильно
Маникандан,
2

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

Амит Шарма
источник
1

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

Тхоаи Нго
источник
1

В elasticsearch 2.x:

vi /etc/sysconfig/elasticsearch 

Перейти к блоку кода

# Heap size defaults to 256m min, 1g max
# Set ES_HEAP_SIZE to 50% of available RAM, but no more than 31g
#ES_HEAP_SIZE=2g

Раскомментируйте последнюю строку, например

ES_HEAP_SIZE=2g
Анкуш
источник