Skip to main content

Решаем проблему с нехваткой оперативной памяти

На серверах с небольшим объемом оперативной памяти может возникнуть ошибка Cannot allocate memory. Чтобы её устранить, откройте файл /etc/elasticsearch/jvm.options и отредактируйте в нем две строки, определяющие объем доступной памяти. Imageцыв.png

1g означает, что Elasticsearch будет использовать 1 гигабайт оперативной памяти. 512m — 512 мегабайт. Вы можете подставить своё значение в зависимости от характеристик сервера. Узнать объем оперативной памяти в байтах можно с помощью команды free.


Если вы сталкиваетесь с ситуацией, когда служба Elastisearch внезапно отключается без видимой причины, то, скорее всего, проблема связана с убийцей OOM. Возможно, вы сможете подтвердить это, выполнив эту команду:

grep -i "Out of memory" /var/log/messages | grep -i java
Sep 18 23:01:00 server kernel: Out of memory: Kill process 19539 (java) score 362 or sacrifice child
Sep 18 23:09:09 server kernel: Out of memory: Kill process 20514 (java) score 377 or sacrifice child
Sep 18 23:09:31 server kernel: Out of memory: Kill process 20514 (java) score 377 or sacrifice child
Sep 18 23:19:36 server kernel: Out of memory: Kill process 21254 (java) score 382 or sacrifice child
Sep 18 23:19:51 server kernel: Out of memory: Kill process 21254 (java) score 383 or sacrifice child
Sep 18 23:20:06 server kernel: Out of memory: Kill process 21344 (java) score 380 or sacrifice child
Sep 18 23:20:22 server kernel: Out of memory: Kill process 21344 (java) score 380 or sacrifice child

ИЛИ АЛЬТЕРНАТИВНО: (Эта команда может занять некоторое время, чтобы показать какие-либо выходные данные. Ищите строки, содержащие строку «java»)

systemctl start elasticsearch;tail -f /var/log/messages | grep -Ei "(out of memory)" --line-buffered
Sep 19 00:12:31 server kernel: Out of memory: Kill process 25011 (java) score 380 or sacrifice child
Sep 19 00:12:32 server kernel: Out of memory: Kill process 25011 (java) score 380 or sacrifice child
Sep 19 00:12:33 server kernel: Out of memory: Kill process 25074 (VM Periodic Tas) score 380 or sacrifice child
.....

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


Если появляется предупреждение при запуске elasticsearch: OpenJDK 64-Bit Server VM warning:

OpenJDK 64-Bit Server VM warning: Option UseConcMarkSweepGC was deprecated in version 9.0 and will likely be removed in a future release.

Измените конфигурацию файла /etc/elasticsearch/jvm.options и замените -XX:+UseConcMarkSweepGC на -XX:+UseG1GC. И перезапустить Elasticsearch. G1GC.png


При возникновение ошибки данного типа: Error: Could not find or load main class

Error: Could not find or load main class "-Djava.io.tmpdir=.var.lib.elasticsearch.tmp"
Caused by: java.lang.ClassNotFoundException: "-Djava.io.tmpdir=.var.lib.elasticsearch.tmp"

В данной ситуации раскоментируем и изменяем значение в файле /etc/sysconfig/elasticsearch в строке ES_JAVA_OPTS="-Djna.tmpdir=/var/lib/elasticsearch/tmp"

Tmpdir.png

Это в случае, если домашний каталог elasticsearch в пользовательском месте, и мы связываем это пользовательское местоположение с /var/lib/elasticsearch.


Также возможное появление предупреждения: OpenJDK 64-Bit Server VM warning: UseAVX=2

OpenJDK 64-Bit Server VM warning: UseAVX=2 is not supported on this CPU, setting it to UseAVX=1

В данной ситуации изменяем значение UseAVX=2 на UseAVX=1 в файле /etc/elasticsearch/jvm.options AVX2.png


Elasticsearch не запускается и нет журналов

No start.png

Проблеме решилась после удаления /var/lib/elasticsearch/nodes/0/node.lock и переустановки elasticsearch.

Также рекомендуется перед переустановкой удалить все каталоги Elasticsearch /var/lib/elasticsearch//etc/elasticsearch/, /etc/sysconfig/elasticsearch