Какой объем виртуальной памяти занимает куча 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
Этот файл содержит максимальное количество областей карты памяти, которые может иметь процесс. Области карты памяти используются как побочный эффект вызова 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
вероятно, достаточно для вашего случая, если нет, вы можете настроить его и контролировать использование виртуальной памяти.