Главная / Справочник ошибок / Elasticsearch
Elasticsearch отклонил запрос: не хватает памяти кучи
circuit_breaking_exception: [parent] Data too large, data for [<http_request>] would be [1.9gb], which is larger than the limit of [1.9gb]
circuit_breaking_exception, parent Data too large: куча JVM у Elasticsearch почти заполнена, и узел отклоняет запросы, чтобы не упасть. Как проверить кучу и что менять.
Что это значит
В 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 у предохранителя показывает, сколько раз он срабатывал.
Что сделать
- Увеличить кучу:
-Xmsи-Xmxодинаковые, не больше половины памяти сервера и не больше 31 ГБ. - Сократить число шардов: удалить старые индексы, укрупнить мелкие. Ориентир: не больше 20 шардов на гигабайт кучи.
- В контейнере проверить, что лимит памяти контейнера примерно вдвое больше кучи: остальное нужно файловому кэшу.
- Если ошибка приходит на запись, уменьшить размер пакета у того, кто индексирует.