Мы настроили параметры JVM эластичного поиска /etc/elasticsearch/jvm.options
для использования фиксированного размера кучи -Xms512m -Xmx512m
Это может быть подтверждено как работающее при проверке процесса эластичного поиска:
Однако вы заметите, что он по-прежнему использует 835 МБ памяти.
Если мы проверим фактический размер используемой кучи с ES:
root: curl -sS -XGET "localhost:9200/_cat/nodes?h=heap*&v"
heap.current heap.percent heap.max
276.1mb 55 494.9mb
На самом деле используется только 276 МБ кучи - так где же именно используются остальные 559 МБ? Мы обеспокоены тем, что это вызывает много проблем с подкачкой / разбиением на страницы, особенно в столбце VIRT имеет размер 4 ГБ (но мне сказали не беспокоиться об этом столбце, хотя мне кажется, что это слишком большое число)
Мы также отключили bled swapping для Elastic Search с опцией mlockall, что можно подтвердить с помощью:
root:~# curl -s localhost:9200/_nodes?pretty|grep mlock
"mlockall" : true
Однако, похоже, это ВСЕ ЕЩЕ подкачка:
for file in /proc/*/status ; do awk '/VmSwap|Name/{printf $2 " " $3}END{ print ""}' $file; done | sort -k 2 -n -r | less
java 128592 kB
Итак, мои вопросы:
-Xmx512m
Этот параметр ограничивает только объем оперативной памяти, которую использует приложение Elasticsearch (внутри вашей JVM), но не ограничивает объем оперативной памяти, необходимой JVM для накладных расходов. То же самое и с mlockall
. Вот почему Elastic предлагает использовать 50% доступной оперативной памяти (после ОС и другого запущенного программного обеспечения) для вашего приложения Elasticsearch с -Xmx.
Хорошая статья об этом: Почему мой Процесс Java потребляет больше памяти, чем Xmx
Я бы порекомендовал вам проверить документацию относительно размера кучи
В любом случае, я считаю, что абсолютно не рекомендуется выделять менее 1 ГБ памяти для службы elasticsearch на производственном сервере.