Як змінити максимальний розмір пам'яті Elasticsearch


99

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

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

Я бачив, що мені потрібно змінити -Xmxпараметр у конфігурації Java, але не знаю як.

Я бачив, що можу виконати це:

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

Але коли мені доведеться перезапустити Elasticsearch, це буде втрачено.

Чи можливо змінити максимум використання пам'яті, коли Elasticsearch встановлений як послуга?


Яка операційна система та версія? Еластична версія пошуку? Як ви встановили Elasticsearch?
Джеймс Аддісон

1
Ви можете зменшити кількість реплік і фрагментів, оскільки немає можливості їх встановити на 1 вузол, додайте це до /etc/elasticsearch/elasticsearch.yaml: index.number_of_shards: 1 index.number_of_replicas: 0 Таким чином ви заощадите на пам'яті та процесорі, не виконуючи зайвих робіт .
neo112

Відповіді:


127

В 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
А для Elasticsearch 5.2 на Mac OS 10.12 я знайшов цей файл у/usr/local/opt/elasticsearch/libexec/config/jvm.options
victorpolko

1
Я можу підтвердити це для екземпляра aws ami (встановленого за допомогою RPM), але спочатку встановіть MAX_LOCKED_MEMORY = необмежену кількість в / etc / sysconfig / elasticsearch та bootstrap.memory_lock: true in /etc/elasticsearch/elasticsearch.yml
mork

2
Це не працює в Windows - правильна відповідь тут: stackoverflow.com/questions/28798845 / ...
CBP

4
Для встановлення домашніх програм файл знаходиться тут:/usr/local/etc/elasticsearch/jvm.options
Мілован Зогович

117

Оновлено 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 / 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/… )
Том

17
У CentOS я бачу конфігурації, про які ви згадали під /etc/defaultситами під `/ etc / sysconfig '
Nishant

5
На CentOS /etc/sysconfig/elasticsearch- це відповідне місце для внесення цих змін. RPM навіть надає версію цього файлу за замовчуванням.
slm

5
Це більше не застосовується для Elasticsearch 5, вам потрібна ця відповідь .
tirdadc

2
Це виглядає добре, але я поставив свої обмеження спеціально для користувачів із пошуку /etc/security/limits.d/elasticsearch.conf
еластичних пошуків

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, і це не мало ефекту
Jonesome Reinstate Monica

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і перезапустіть службу. Робота повинна бути виконана!


1
дякую, ти врятуєш мій день! так, це правильна процедура для Debian 8
швидше2b

Хіба немає іншого місця для налаштування цього, окрім зміни файлу /usr/?
Мартін Шредер

6

Якщо ви використовуєте службову обгортку, що міститься в сховищі Github Elasticsearch, знайденому за адресою https://github.com/elasticsearch/elasticsearch-servicewrapper , то конф-файл у програмі elasticsearch-servicewrapper / service / elasticsearch.conf контролює налаштування пам'яті. На вершині elasex.conf - параметр:

set.default.ES_HEAP_SIZE=1024

Просто зменшіть цей параметр, скажіть на "set.default.ES_HEAP_SIZE = 512", щоб зменшити виділену пам'ять Elasticsearch.

Зауважте, що якщо ви використовуєте еластичну обгортку-пошук, ES_HEAP_SIZE, наданий у elastsesearch.conf, ПЕРЕМОЖУЄ ВСІ ІНШІ НАЛАШТУВАННЯ. Це зайняло мене трохи для того, щоб розібратися, оскільки, з документації, здавалося, що пам’ять купи може бути встановлена ​​з plasticsearch.yml

Якщо параметри вашої службової обгортки встановлені десь в іншому місці, наприклад, в / etc / default / elasticsearch, як у прикладі Джеймса, тоді встановіть ES_HEAP_SIZE там.


2
Що робити, якщо у вас взагалі немає послуги? (тобто просто запустіть бін / еластичний пошук -d)
Генлі Чіу


@HenleyChiu тоді просто встановіть змінну середовища ES_HEAP_SIZE перед її запуском. тобтоexport ES_HEAP_SIZE=1G; bin/elasticsearch -d
Андрій Регентов

У ES 1.7.x акції elasticsearch.conf (той, який встановлений rpm на CentOS), взагалі немає set.default. Чи працює цей підхід на ES 1.7?
Jonesome Reinstate Моніка

Наведена відповідь вводить в оману. Встановіть ES_HEAP_SIZE в / etc / sysconfig /
elasticsearch

6

Якщо ви встановили 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

Сподіваюся, це допомагає :)


1
Не роби це так. Це не вдале місце для внесення цих типів змін. Це гігантський хак! Можливо, це працюватиме, але воно може бути зруйноване щоразу, коли ES буде оновлено.
слм

1
Додам: я спробував вище підхід на ES 1.7 на CentOS 7, і це не мало ефекту.
Jonesome Reinstate Моніка

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

Також, як я підтверджую, розмір купи коректно оновлений
Manikandan

2

У elastsearch шляху до домашнього dir, тобто, як правило /usr/share/elasticsearch, є файл конфігурації bin/elasticsearch.in.sh. Змінити параметр ES_MIN_MEM, ES_MAX_MEMв цьому файлі для зміни -Xms2g, -Xmx4gвідповідно. І переконайтеся, що ви перезапустили вузол після цієї зміни конфігурації.



1

В еластичному дослідженні 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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.