У меня есть сервер 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 после этого изменения конфигурации.