Как уменьшить/увеличить потребление памяти Elasticsearch
Что делать если elasticsearch жрет слишком много памяти
Это очень важная настройка для ElasticSearch. Чтобы этот параметр был установлен правильно, система должна хорошо контролироваться
Короче говоря, мы определяем объем памяти, который Elasticsearch будет выделять в начале, и максимальное использование памяти с помощью этой конфигурации.
Перед настройкой Heap Size я расскажу о концепции памяти Heap для правильного отслеживания размера Heap. Приложения Java используют методы «стека»(stack) и «кучи»(heap) для сохранения данных в памяти.
В режиме кучи приложение управляет использованием и очисткой памяти. В Java объекты хранятся в памяти кучи, и благодаря структурам, называемым сборщиком мусора, обеспечивается управление памятью кучи.
Что такое сборщик мусора?
В Java управление памятью выполняется в фоновом режиме с включенным JVM и сборщиком мусора. Сборщик мусора упрощает разработку приложений и сокращает время написания кода за счет автоматического управления памятью. Опять же, сборщик мусора может справиться с проблемой утечки памяти, вызванной ошибками кодирования.
Сборка мусора - это автоматизированный механизм управления памятью. он просматривает память кучи, обнаруживает используемые объекты и удаляет те, на которые нет ссылок. Пространство, занятое неиспользуемыми/несвязанными объектами, очищается из памяти, и это увеличивает доступную свободную память. Механизм, выполняющий этот процесс, называется сборщиком мусора.
Чрезмерный размер кучи может использоваться для кэширования, однако большой размер кучи может вызвать паузы в сборщике мусора. Когда сборщик мусора останавливается, возврат к конечной точке может длиться очень долго.
При длительной паузе доступ не происходит в распределенных системах, таких как Elasticsearch, поскольку узел может быть изолирован от кластера. На этом узле нет операций чтения или записи. Если узел является главным узлом, можно выбрать новый главный узел. Если узел является узлом данных, это может привести к размещению сегментов в других узлах данных. В этом случае увеличивается сетевой трафик, операции ввода-вывода на диске и нагрузка на кластер.
Вкратце, если размер кучи меньше необходимого, могут возникнуть другие проблемы, помимо ошибок памяти.
Рекомендации по уменьшению/увеличению размера "кучи"
- Настоятельно рекомендуется, чтобы размер кучи не превышал половины общей памяти. Поэтому, если у вас 64ГБ памяти, вам не следует устанавливать размер кучи на 48ГБ
- Размер кучи не рекомендуется превышать 32ГБ
- По умолчанию Xms1g и Xmx1g составляют 1ГБ
- Чтобы изменить размер кучи JVM, то нужно отредактировать файл по пути /etc/elasticsearch/jvm.options.
################################################################
## IMPORTANT: JVM heap size
################################################################
##
## The heap size is automatically configured by Elasticsearch
## based on the available memory in your system and the roles
## each node is configured to fulfill. If specifying heap is
## required, it should be done through a file in jvm.options.d,
## and the min and max should be set to the same value. For
## example, to set the heap to 4 GB, create a new file in the
## jvm.options.d directory containing these lines:
##
## -Xms4g
## -Xmx4g
##
## See https://www.elastic.co/guide/en/elasticsearch/reference/current/heap-size.html
## for more information
##
################################################################
т.е. если вы хотите уменьшить потребление оперативной памяти, то просто выставляете, например, такие значения:
-Xms512m
-Xmx512m
Если же захочется увеличить, то вбиваем, например 4Гб:
-Xms4g
-Xmx4g
После изменения настройки, перегрузите ES:
sudo service elasticsearch restart
Теперь можете замерить потребление Elasticsearch'ом памяти и убедиться, что настройки были сохранены.
Евгений11.04.2023
Ха-ха, elasticsearch жрет оперативки без зазрения совести))