Spec-Zone.ru › Elasticsearch 8
›Elasticsearch Guide [8.17] ›Настроить Elasticsearch ›Настройка Elasticsearch

Настройка параметров JVM

При необходимости вы можете переопределить стандартные параметры JVM, добавив файлы пользовательских параметров (предпочтительный вариант) или задав переменную среды ES_JAVA_OPTS.

Файлы параметров JVM должны иметь суффикс .options и содержать список аргументов JVM, разделённых по строкам. JVM обрабатывает файлы параметров в лексикографическом порядке.

Местоположение файлов параметров JVM зависит от типа установки:

  • tar.gz или .zip: Добавьте файлы пользовательских параметров JVM в config/jvm.options.d/.
  • Debian или RPM: Добавьте файлы пользовательских параметров JVM в /etc/elasticsearch/jvm.options.d/.
  • Docker: Прикрепите (bind mount) файлы пользовательских параметров JVM к /usr/share/elasticsearch/config/jvm.options.d/.

Настройка собственных параметров JVM обычно не рекомендуется и может негативно сказаться на производительности и стабильности. В большинстве случаев рекомендуется использовать значения по умолчанию, предоставляемые Elasticsearch.

Не изменяйте корневой файл jvm.options. Используйте файлы в jvm.options.d/ вместо этого.

Синтаксис параметров JVM

Файл параметров JVM содержит список аргументов JVM, разделённых по строкам. Аргументы предваряются дефисом (-). Для применения настроек к определённым версиям, добавьте версию или диапазон версий, после чего поставьте двоеточие.

  • Применение настройки ко всем версиям:

    -Xmx2g
  • Применение настройки к определённой версии:

    17:-Xmx2g
  • Применение настройки к диапазону версий:

    17-18:-Xmx2g

    Для применения настройки к определённой версии и всем последующим, опустите верхнюю границу диапазона. Например, эта настройка применяется к Java 17 и более поздним версиям:

    17-:-Xmx2g

Пустые строки игнорируются. Строки, начинающиеся с #, обрабатываются как комментарии и игнорируются. Строки, которые не являются комментариями и не распознаются как допустимые аргументы JVM, отклоняются, и Elasticsearch не запустится.

Использование переменных среды для настройки параметров JVM

В производственных средах используйте файлы параметров JVM для переопределения значений по умолчанию. В тестовых и развивающихся средах вы также можете задать параметры JVM через переменную среды ES_JAVA_OPTS.

export ES_JAVA_OPTS="$ES_JAVA_OPTS -Djava.io.tmpdir=/path/to/temp/dir"
./bin/elasticsearch

Если вы используете пакеты RPM или Debian, вы можете указать ES_JAVA_OPTS в файле конфигурации системы sysconfig.

Elasticsearch игнорирует переменные среды JAVA_TOOL_OPTIONS и JAVA_OPTS.

Указание размера кучи JVM

По умолчанию Elasticsearch автоматически устанавливает размер кучи JVM на основе роли узла и общего объёма памяти. Рекомендуется использовать стандартное значение размера кучи для большинства производственных сред.

Для переопределения размера кучи по умолчанию, задайте минимальный и максимальный размер кучи, Xms и Xmx. Минимальное и максимальное значения должны совпадать.

Размер кучи должен основываться на доступной оперативной памяти:

  • Установите Xms и Xmx не более чем на 50% от общего объёма памяти. Elasticsearch требует памяти для целей, отличных от кучи JVM. Например, Elasticsearch использует буферы вне кучи для эффективной сетевой коммуникации и полагается на кэш файловой системы операционной системы для эффективного доступа к файлам. Сама JVM также требует некоторой памяти. Elasticsearch обычно использует больше памяти, чем предел, настроенный с помощью параметра Xmx.

    При работе в контейнере, таком как Docker, общий объём памяти определяется как количество памяти, видимой для контейнера, а не общий объём памяти на хосте.

  • Установите Xms и Xmx не более чем до порога сжатых обычных указателей объектов (oops). Точный порог варьируется, но 26 ГБ безопасны на большинстве систем и могут быть до 30 ГБ на некоторых системах. Для проверки, что вы не превысили порог, проверьте журналы Elasticsearch на запись, похожую на эту:

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

    Или проверьте значение jvm.using_compressed_ordinary_object_pointers для узлов с помощью API nodes info:

    resp = client.nodes.info(
        node_id="_all",
        metric="jvm",
    )
    print(resp)
    response = client.nodes.info(
      node_id: '_all',
      metric: 'jvm'
    )
    puts response
    const response = await client.nodes.info({
      node_id: "_all",
      metric: "jvm",
    });
    console.log(response);
    GET _nodes/_all/jvm

Чем больше доступной памяти для Elasticsearch, тем больше памяти он может использовать для своих внутренних кэшей. Это оставляет меньше памяти для использования операционной системой для кэша файловой системы. Большие кучи также могут вызывать более длительные паузы в сборке мусора.

Для настройки размера кучи добавьте аргументы JVM Xms и Xmx в пользовательский файл параметров JVM с расширением .options и сохраните его в каталоге jvm.options.d/. Например, для установки максимального размера кучи в 2 ГБ, установите как Xms, так и Xmx в 2g:

-Xms2g
-Xmx2g

Для тестирования вы также можете установить размеры кучи с помощью переменной среды ES_JAVA_OPTS:

ES_JAVA_OPTS="-Xms2g -Xmx2g" ./bin/elasticsearch

Переменная ES_JAVA_OPTS переопределяет все другие параметры JVM. Мы не рекомендуем использовать ES_JAVA_OPTS в производственной среде.

Если вы запускаете Elasticsearch как службу в Windows, вы можете изменить размер кучи с помощью диспетчера служб. См. Установку и запуск Elasticsearch в качестве службы в Windows.

Настройка пути к дампу кучи JVM

По умолчанию Elasticsearch настраивает JVM для сохранения дампов кучи при исключениях из-за нехватки памяти в каталоге по умолчанию. Для пакетов RPM и Debian этим каталогом является /var/lib/elasticsearch. Для дистрибутивов Linux и MacOS и Windows этот каталог находится в корневой директории Elasticsearch.

Если этот путь не подходит для хранения дампов кучи, измените запись -XX:HeapDumpPath=... в jvm.options:

  • Если вы указываете каталог, JVM сгенерирует имя файла для дампа кучи на основе PID текущего экземпляра.
  • Если вы указываете имя фиксированного файла вместо каталога, файл не должен существовать, когда JVM необходимо выполнить дамп кучи при исключении из-за нехватки памяти. В противном случае дамп кучи не удастся.

Настройки ведения журнала GC

По умолчанию Elasticsearch включает ведение журнала сборки мусора (GC). Эти настройки заданы в jvm.options и выводятся в том же каталоге, что и журналы Elasticsearch. По умолчанию журналы ротируются каждые 64 МБ и могут занимать до 2 ГБ дискового пространства.

Вы можете перенастроить ведение журнала JVM, используя параметры командной строки, описанные в JEP 158: Объединённый журнал JVM. Если вы не изменяете напрямую файл jvm.options, конфигурация Elasticsearch применяется дополнительно к вашим настройкам. Для отключения стандартной конфигурации сначала отключите ведение журнала, задав параметр -Xlog:disable, затем укажите собственные параметры командной строки. Это отключит все ведения журнала JVM, поэтому убедитесь, что вы просмотрели доступные параметры и включили все необходимые.

Для получения дополнительных параметров, не содержащихся в исходном JEP, см. Enable Logging with the JVM Unified Logging Framework.

Примеры

Измените расположение вывода логов GC по умолчанию на /opt/my-app/gc.log, создав $ES_HOME/config/jvm.options.d/gc.options с некоторыми образцами параметров:

# Turn off all previous logging configuratons
-Xlog:disable

# Default settings from JEP 158, but with `utctime` instead of `uptime` to match the next line
-Xlog:all=warning:stderr:utctime,level,tags

# Enable GC logging to a custom location with a variety of options
-Xlog:gc*,gc+age=trace,safepoint:file=/opt/my-app/gc.log:utctime,level,pid,tags:filecount=32,filesize=64m

Настройте контейнер Elasticsearch Docker на отправку отладочных логов GC в стандартный поток ошибок (stderr). Это позволит контейнеру-оркестратору обработать вывод. Если используется переменная среды ES_JAVA_OPTS, укажите:

MY_OPTS="-Xlog:disable -Xlog:all=warning:stderr:utctime,level,tags -Xlog:gc=debug:stderr:utctime"
docker run -e ES_JAVA_OPTS="$MY_OPTS" # etc

Настройка журнала JVM критических ошибок

По умолчанию Elasticsearch настраивает JVM для записи логов критических ошибок в стандартный каталог логов. Для пакетов RPM и Debian этот каталог равен /var/log/elasticsearch. Для дистрибутивов Linux и MacOS и Windows этот каталог находится в корневой директории Elasticsearch.

Это журналы, генерируемые JVM при возникновении критической ошибки, такой как ошибка сегментации. Если этот путь не подходит для хранения логов, измените запись -XX:ErrorFile=... в jvm.options.

© 2023-2025 Elasticsearch
As of September 2024, Elasticsearch is available under a choice of three licenses: the Server Side Public License (SSPL), the Elastic License, or the AGPLv3 (OSI approved).
Elasticsearch and the Elasticsearch logo are trademarks of Elasticsearch B.V., registered in the U.S. and in other countries.
https://www.elastic.co/guide/en/elasticsearch/reference/8.17/advanced-configuration.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API