Назад | Перейти на главную страницу

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

Мы настроили параметры 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. Что мы можем сделать, чтобы уменьшить размер памяти, потребляемой Elastic Search, чтобы обеспечить его фиксированный размер в 512 МБ или как можно ближе к нему?
  2. Убедитесь, что подкачка отключена
  3. Уменьшите размер столбца VIRT (или не о чем беспокоиться?)

Я бы порекомендовал вам проверить документацию относительно размер кучи

В любом случае, я считаю, что категорически рекомендуется не выделять менее 1 ГБ памяти для службы elasticsearch на производственном сервере.

-Xmx512m

Этот параметр ограничивает только объем оперативной памяти, которую использует приложение Elasticsearch (внутри вашей JVM), но не ограничивает объем оперативной памяти, необходимой JVM для накладных расходов. То же самое и с mlockall

Вот почему Elastic предлагает использовать 50% доступной оперативной памяти (после ОС и другого запущенного программного обеспечения) для вашего приложения Elasticsearch с -Xmx.

Хорошая статья об этом: Почему мой процесс Java потребляет больше памяти, чем Xmx