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

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

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

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

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

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

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

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

19 ответов

В 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

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

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


У меня есть страница с наклейками, которой я делюсь с другими, когда задаюсь вопросом о памяти и 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 /asticsearch (для CentOS/RH: /etc/sysconfig/asticsearch):

ES_HEAP_SIZE=512m
MAX_OPEN_FILES=65535
MAX_LOCKED_MEMORY=unlimited

/etc/elasticsearch/elasticsearch.yml:

bootstrap.mlockall: true

Создайте новый файл с расширением .options внутри /etc/elasticsearch/jvm.options.dи выложи туда варианты. Например:

      sudo nano /etc/elasticsearch/jvm.options.d/custom.options

и поместите туда контент:

      # JVM Heap Size - see /etc/elasticsearch/jvm.options
-Xms2g
-Xmx2g

Он установит максимальный размер кучи на 2 ГБ. Не забудьте перезапустить elasticsearch:

      sudo systemctl restart elasticsearch

Теперь вы можете проверить логи:

      sudo cat /var/log/elasticsearch/elasticsearch.log | grep "heap size"

Вы увидите что-то вроде этого:

heap size [2gb], compressed ordinary object pointers [true]

Док

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

/etc/sysconfig/elasticsearch 

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

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

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

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

sudo vim /etc/init.d/elasticsearch

Задавать

ES_HEAP_SIZE=512m

затем в:

sudo vim /etc/elasticsearch/elasticsearch.yml

Задавать:

bootstrap.memory_lock: true

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

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

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

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

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

set.default.ES_HEAP_SIZE=1024

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

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

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

Если вы установили ES с использованием пакетов RPM/DEB, как указано (как вы, кажется, имеете), вы можете изменить это, отредактировав скрипт init (/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

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

  • 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

Путь к файлу для изменения размера кучи /etc/elasticsearch/jvm.options

Если вы используете nano, сделайте sudo nano /etc/elasticsearch/jvm.options и обновить -Xms а также -Xmx соответственно.

(Вы можете использовать любой редактор файлов для редактирования)

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

Oneliner для Centos 7 и Elasticsearch 7 (2 г = 2 ГБ)

      $ echo $'-Xms2g\n-Xmx2g' > /etc/elasticsearch/jvm.options.d/2gb.options

а потом

      $ service elasticsearch restart

Если вы используете docker-compose для запуска кластера ES:

  • Открытым <your docker compose>.yml файл
  • Если вы установили volumesсобственность, вы ничего не потеряете. В противном случае вы должны сначала переместить индексы.
  • Ищите это значение ES_JAVA_OPTS под environment и измените значение во всех узлах, результат может быть примерно таким, как "ES_JAVA_OPTS=-Xms2g -Xmx2g"
  • перестроить все узлы docker-compose -f <your docker compose>.yml up -d

В asticsearch 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

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

Если вы используете Ubuntu 15.04+ или любой другой дистрибутив, использующий systemd, вы можете установить максимальный размер памяти, отредактировав службу elasticsearch systemd и установив максимальный размер памяти с помощью переменной среды ES_HEAP_SIZE. Я протестировал его с помощью Ubuntu 20.04, и он отлично работает:

      systemctl edit elasticsearch 

Добавьте переменную среды ES_HEAP_SIZE с желаемым максимальным объемом памяти, например, 2 ГБ:

      [Service]
Environment=ES_HEAP_SIZE=2G

Перезагрузите демон systemd

      systemd daemon-reload

Затем перезапустите эластичный поиск

      systemd restart elasticsearch

Чтобы проверить, работает ли он так, как ожидалось:

      systemd status elasticsearch

Вы должны увидеть в статусе -Xmx2G:

       CGroup: /system.slice/elasticsearch.service
         └─2868 /usr/bin/java -Xms2G -Xmx2G

Обновить эластичную конфигурацию в пути /etc/elasticsearch/jvm.options

      ################################################################
## IMPORTANT: JVM heap size
################################################################
##
## The heap size is automatically configured by Elasticsearch
## based on the available memory in your system and the roles
## each node is configured to fulfill. If specifying heap is
## required, it should be done through a file in jvm.options.d,
## and the min and max should be set to the same value. For
## example, to set the heap to 4 GB, create a new file in the
## jvm.options.d directory containing these lines:
##
## -Xms4g
## -Xmx4g
##
## See https://www.elastic.co/guide/en/elasticsearch/reference/current/heap-size.html
## for more information
##
################################################################
-Xms1g
-Xmx1g

Эти конфигурации означают, что вы выделяете 1 ГБ ОЗУ для службы elasticsearch.

Эластичный поиск 7.xи выше, проверено с Ubuntu 20

  1. Создайте файл в /etc/elasticsearch/jvm.options.d. Имя файла должно заканчиваться на .options

    Например heap_limit.options

  2. Добавьте эти строки в файл

    -Xms1g# Начальное выделение памяти

    -Xmx1g# Максимальное выделение памяти

  3. Перезапустите службу эластичного поиска

    sudo service elasticsearch restart

    или же

    sudo systemctl restart elasticsearch

окно 7 elasticsearch эластичный поиск проблема памяти elasticsearch-7.14.1\config\jvm.options

добавьте это
-Xms1g -Xmx1g

elasticsearch-7.14.1 \ config \ elasticsearch.yml

раскомментируйте bootstrap.memory_lock: true

и вредитель https://github.com/elastic/elasticsearch-servicewrapper скачать служебный файл и вредитель lasticsearch-7.14.1 \ bin

bin \ elasticsearch.bat введите

Другие вопросы по тегам