SystemdDoctor
служба не работает elasticsearch память jvm

Elasticsearch: служба падает из-за размера кучи JVM

Куча JVM выделяется при старте и не может превышать доступную память. Если размер кучи задан больше предела памяти службы, процесс убивают почти сразу — и выглядит это как загадочное падение без сообщений.

Вероятные причины

По порядку: сверху то, что встречается чаще.

  1. Куча больше предела памяти службы

    Предел контрольной группы жёстче любых настроек JVM. При превышении процесс убивает ядро.

  2. Куча больше половины памяти машины

    Рекомендация Elasticsearch — не больше половины памяти: остальное нужно файловому кешу, от которого зависит скорость поиска.

  3. Размер кучи задан в двух местах

    Настройки в основном файле и в каталоге дополнений могут конфликтовать, и применяется не то, что вы правили.

Диагностика

Команды идут в том порядке, в котором их стоит выполнять: каждая следующая проверяет то, что осталось после предыдущей.

Все объявления размера кучи.

grep -rE "^-Xm" /etc/elasticsearch/ 2>/dev/null

Предел памяти службы и пик потребления.

systemctl show elasticsearch -p MemoryMax -p MemoryPeak

Убивало ли процесс ядро.

journalctl -k -b --no-pager | grep -i "killed process" | grep -i java

Решение

Решение своё для каждой причины. Сначала определите, какая из них ваша, — иначе правки наложатся друг на друга.

1. Куча больше предела памяти службы
Почему происходит
Предел контрольной группы жёстче любых настроек JVM. При превышении процесс убивает ядро.
Как проверить
Сравните размер кучи и предел службы.
grep -E "^-Xm" /etc/elasticsearch/jvm.options* 2>/dev/null
systemctl show elasticsearch -p MemoryMax -p MemoryPeak
Как исправить
Задавайте предел службы с запасом к размеру кучи: JVM расходует память и вне кучи. Запас в треть от размера кучи — разумная отправная точка.
2. Куча больше половины памяти машины
Почему происходит
Рекомендация Elasticsearch — не больше половины памяти: остальное нужно файловому кешу, от которого зависит скорость поиска.
Как проверить
Посмотрите память машины и размер кучи.
free -h
grep -E "^-Xm" /etc/elasticsearch/jvm.options* 2>/dev/null
Как исправить
Уменьшите размер кучи до половины памяти или меньше. Больше 32 ГБ задавать не стоит: теряется сжатие указателей.
3. Размер кучи задан в двух местах
Почему происходит
Настройки в основном файле и в каталоге дополнений могут конфликтовать, и применяется не то, что вы правили.
Как проверить
Посмотрите все объявления.
grep -rE "^-Xm" /etc/elasticsearch/ 2>/dev/null
Как исправить
Оставьте размер кучи в одном месте — в файле дополнений, как рекомендует документация.

Пример вывода

Куча больше предела памяти службы. Пример показательный: он собран на тестовой машине специально для этой страницы, а не взят из чужого журнала.

$ grep -E "^-Xm" /etc/elasticsearch/jvm.options.d/heap.options
-Xms8g
-Xmx8g

$ systemctl show elasticsearch -p MemoryMax
MemoryMax=6442450944

kernel: Out of memory: Killed process 1200 (java) total-vm:12812480kB

Связанные ошибки

Где встречается чаще всего

Источники

  • Документация Elasticsearch: размер кучи документация программы
    сверено 15 сентября 2026
  • Воспроизведено на тестовой машине, systemd 255 (Ubuntu 24.04)
    Воспроизведено кучей 8 ГБ при MemoryMax 6 ГБ.
    собственная проверка, systemd 255
    сверено 15 сентября 2026