Spec-Zone.ru › Elasticsearch 8
›Elasticsearch Guide [8.17] ›Настройка Elasticsearch ›Важная системная настройка

Отключение подкачки

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

Подкачка очень негативно сказывается на производительности, стабильности узла и её следует избегать во что бы то ни стало. Она может привести к тому, что сборка мусора будет длиться минуты, а не миллисекунды, а узлы будут медленно отвечать или даже отключаться от кластера. В устойчивой распределённой системе более эффективным решением будет позволить операционной системе убить узел.

Существует три подхода к отключению подкачки. Предпочтительный вариант — полное отключение подкачки. Если это невозможно, вопрос о том, стоит ли предпочесть минимальную подкачку (swappiness) или блокировку памяти, зависит от вашей среды.

Отключение всех файлов подкачки

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

В системах Linux вы можете временно отключить подкачку, выполнив:

sudo swapoff -a

Это не требует перезапуска Elasticsearch.

Чтобы отключить её постоянно, вам потребуется отредактировать файл /etc/fstab и прокомментировать все строки, содержащие слово swap.

В Windows аналогичный эффект можно получить, отключив файл подкачки полностью через System Properties → Advanced → Performance → Advanced → Virtual memory.

Настройка swappiness

Ещё один вариант, доступный в системах Linux, — убедиться, что значение sysctl vm.swappiness установлено в 1. Это уменьшает тенденцию ядра к подкачке и не должно приводить к ней в нормальных условиях, но при этом позволяет всему системе использовать подкачку в случае необходимости.

Включение bootstrap.memory_lock

Ещё один вариант — использование mlockall в системах Linux/Unix или VirtualLock в Windows, чтобы заблокировать адресное пространство процесса в оперативной памяти, предотвращая подкачку кучи Elasticsearch.

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

Для включения блокировки памяти установите bootstrap.memory_lock в true в файле elasticsearch.yml:

bootstrap.memory_lock: true

mlockall может привести к завершению работы JVM или сеанса оболочки, если он попытается выделить больше памяти, чем доступно!

После запуска Elasticsearch вы можете проверить, успешно ли было применено это значение, проверив значение mlockall в выводе этого запроса:

resp = client.nodes.info(
    filter_path="**.mlockall",
)
print(resp)
response = client.nodes.info(
  filter_path: '**.mlockall'
)
puts response
const response = await client.nodes.info({
  filter_path: "**.mlockall",
});
console.log(response);
GET _nodes?filter_path=**.mlockall

Если вы видите, что mlockall равно false, это означает, что запрос mlockall не выполнен. Вы также увидите строку с дополнительной информацией в логах со словами Unable to lock JVM Memory.

Наиболее вероятной причиной в системах Linux/Unix является то, что у пользователя, запускающего Elasticsearch, нет разрешения на блокировку памяти. Это можно предоставить следующим образом:

.zip и .tar.gz

Установите ulimit -l unlimited от имени root перед запуском Elasticsearch. В качестве альтернативы установите memlock на значение unlimited в файле /etc/security/limits.conf:

# allow user 'elasticsearch' mlockall
elasticsearch soft memlock unlimited
elasticsearch hard memlock unlimited
RPM и Debian
Установите LimitMEMLOCK на значение infinity в настройках systemd.

Ещё одной возможной причиной неудачи mlockall может быть то, что временная директория JNA (обычно подкаталог /tmp) смонтирована с параметром noexec. Это можно решить, указав новую временную директорию для JNA с помощью переменной окружения ES_JAVA_OPTS:

export ES_JAVA_OPTS="$ES_JAVA_OPTS -Djna.tmpdir=<path>"
./bin/elasticsearch

или заданием этого флага JVM в файле конфигурации 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/setup-configuration-memory.html

Spec-Zone.ru

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