Какой объем виртуальной памяти занимает куча 30,5 ГБ (всего 256 ГБ) для поддержки Elasticsearch?

Предположим, у меня есть машина с 256 ГБ памяти и 12 ТБ SSD. Индексированный размер документа составляет 100 ТБ. Я назначаю 30,5 ГБ к куче Elasticsearch. Остальное для Lucene и OS.

У меня вопрос, сколько виртуальной памяти поддерживает Elasticsearch? Иными словами, сколько проиндексированных документов я могу поместить в виртуальную память для каждой машины?

Спасибо

1 ответ

Объем виртуальной памяти, которую может использовать ES, определяется значением vm.max_map_count установка в /etc/sysctl.conf, По умолчанию он установлен на 262144, но вы можете изменить это значение, используя:

sysctl -w vm.max_map_count=262144

Из документации Linux:

Этот файл содержит максимальное количество областей карты памяти, которые может иметь процесс. Области карты памяти используются как побочный эффект вызова malloc непосредственно mmap и mprotect, а также при загрузке общих библиотек.

В то время как большинству приложений требуется менее тысячи карт, некоторые программы, особенно отладчики malloc, могут потреблять их много, например, до одной или двух карт на выделение.

Значение по умолчанию - 65536.

Таким образом, этот параметр не устанавливает конкретный размер, доступный для ES/Lucene, а содержит ряд отдельных областей памяти, которые может использовать данный процесс. Сколько именно памяти используется, будет зависеть от размера фрагментов памяти, выделяемых ES/Lucene. По умолчанию Lucene использует

  • 1<<30 = 1 073 741 824 ~= 1 ГБ блоков на 64-битной JRE и
  • 1<<28 = 268 435 456 ~= 256 МБ фрагментов на 32-битной JRE

Так что, если вы делаете математику, значение по умолчанию vm.max_map_count вероятно, достаточно для вашего случая, если нет, вы можете настроить его и контролировать использование виртуальной памяти.

Другие вопросы по тегам