Мы настроили параметры 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 ГБ (но мне сказали не беспокоиться об этом столбце, хотя мне это кажется странно большим числом)
Мы также отключили замену эластичного поиска опцией 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
Итак, мои вопросы:
Я бы порекомендовал вам проверить документацию относительно размер кучи
В любом случае, я считаю, что категорически рекомендуется не выделять менее 1 ГБ памяти для службы elasticsearch на производственном сервере.
-Xmx512m
Этот параметр ограничивает только объем оперативной памяти, которую использует приложение Elasticsearch (внутри вашей JVM), но не ограничивает объем оперативной памяти, необходимой JVM для накладных расходов. То же самое и с mlockall
Вот почему Elastic предлагает использовать 50% доступной оперативной памяти (после ОС и другого запущенного программного обеспечения) для вашего приложения Elasticsearch с -Xmx.
Хорошая статья об этом: Почему мой процесс Java потребляет больше памяти, чем Xmx