Производительность OpenSearch может сильно пострадать, если узлу будет разрешена подкачка памяти на диск. OpenSearch можно настроить на автоматическое предотвращение свопинга памяти на хост-машине, добавив в opensearch.yml параметр bootstrap.memory_lock: true. Если проверки bootstrap включены, Elasticsearch не будет запускаться, если не отключена свопинг памяти.
Подробнее о проверках bootstrap можно узнать здесь: Проверка загрузки в OpenSearch - подробное руководство с примерами.
Вполне допустимо иметь
1 | bootstrap.memory_lock: false |
в вашей конфигурации, если вы предприняли альтернативные шаги для предотвращения подмены памяти.
Как решить эту проблему
Отредактируйте файл opensearch.yml, включив в него следующую настройку:
1 | bootstrap.memory_lock: true |
Проверить, сработала ли настройка, можно, выполнив команду:
1 | GET _nodes?filter_path=**.mlockall |
В результате вы должны увидеть true.
1 2 3 4 5 6 7 8 9 | { "nodes":{ "ifU4SFrKTcCaR4Om0uFFbw":{ "process":{ "mlockall":true } } } } |
Если же вы видите ложь, то необходима дальнейшая настройка.
Установка RPM и Debian SystemD
1 | sudo systemctl edit opensearch |
Добавьте следующее:
1 2 3 | [Service] LimitMEMLOCK=infinity sudo systemctl daemon-reload |
Инсталляции .zip и .tar.gz
Добавьте следующую строку в файл /etc/security/limits.conf
1 | opensearch - nofile 65535 |
Другие способы предотвращения свопинга памяти
Существуют и другие способы предотвращения свопинга памяти, кроме использования
1 | bootstrap.memory_lock: false |
можно выбрать один из вариантов ниже
Отключение всех операций работы с файлом подкачки в Linux
1 | sudo swapoff -a |
Это не требует перезапуска OpenSearch.
Для постоянного отключения (при перезагрузке) отредактируйте файл /etc/fstab
Закомментируйте все строки, содержащие "swap", ниже приведен только пример
1 | #/dev/mapper/ubuntu--vg-swap_1 none swap sw 0 |
Отключение всех операций работы с файлом подкачки в Linux с помощью параметра sysctl
Отредактируйте файл /etc/sysctl.conf
1 | vm.swappiness=1 |
после чего, выполните команду
1 | sudo sysctl -p |
Проверка использования свопа
Выполнить:
1 | GET _nodes/stats/os |
В ответе для каждого из узлов вы должны увидеть следующее:
1 2 3 4 5 | "swap" : { "total_in_bytes" : 0, "free_in_bytes" : 0, "used_in_bytes" : 0 }, |