Spec-Zone.ru › Elasticsearch 7
›Elasticsearch Guide [7.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 в выводе этого запроса:

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
Установите значение MAX_LOCKED_MEMORY на unlimited в файле конфигурации системы (файл конфигурации системы) (или см. ниже для систем, использующих systemd).
Системы, использующие systemd
Установите значение LimitMEMLOCK на infinity в конфигурации systemd (конфигурация 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/7.17/setup-configuration-memory.html

Spec-Zone.ru

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