Как уменьшить/увеличить потребление памяти 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.


т.е. если вы хотите уменьшить потребление оперативной памяти, то просто выставляете, например, такие значения:

-Xms512m
-Xmx512m

Если же захочется увеличить, то вбиваем, например 4Гб:


-Xms4g
-Xmx4g

 После изменения настройки, перегрузите ES:


sudo service elasticsearch restart

Теперь можете замерить потребление Elasticsearch'ом памяти и убедиться, что настройки были сохранены.   


Сергей Мухин

Веб-разработчик со стажем программирования более 9 лет, всегда в процессе учебы и созидания.

Есть вопросы?

Я почти всегда в режиме онлайн

Связаться со мной