Что это значит

В Elasticsearch есть предохранители: перед выполнением запроса узел оценивает, хватит ли ему памяти. Если куча JVM занята больше порога (95 % для общего предохранителя parent), запрос отклоняется. Узел остаётся жив, но часть запросов на поиск и запись получает ошибку.

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

Как проверить

GET _nodes/stats/jvm,breaker?filter_path=nodes.*.jvm.mem.heap_used_percent,nodes.*.breakers.parent
GET _cat/nodes?v&h=name,heap.percent,heap.max,ram.percent
GET _cluster/health?filter_path=active_shards

Поле tripped у предохранителя показывает, сколько раз он срабатывал.

Что сделать

  1. Увеличить кучу: -Xms и -Xmx одинаковые, не больше половины памяти сервера и не больше 31 ГБ.
  2. Сократить число шардов: удалить старые индексы, укрупнить мелкие. Ориентир: не больше 20 шардов на гигабайт кучи.
  3. В контейнере проверить, что лимит памяти контейнера примерно вдвое больше кучи: остальное нужно файловому кэшу.
  4. Если ошибка приходит на запись, уменьшить размер пакета у того, кто индексирует.