ElasticsearchHeapUsageCritical (critical, >90%)
Что означает алерт
На одной из нод Elasticsearch утилизация heap >90% дольше 5 минут.
Это риск частых pause GC, деградации latency и отказов по памяти.
Подключение к ES в Kubernetes
kubectl -n camunda-prod port-forward svc/camunda-elasticsearch 9200:9200
Быстрая диагностика
- Подтвердить критический heap:
curl -s 'localhost:9200/_cat/nodes?v&h=name,heap.current,heap.percent,ram.current,ram.percent,cpu,load_1m,node.role,master'
- Проверить old GC:
curl -s 'localhost:9200/_nodes/stats/jvm?filter_path=nodes.*.name,nodes.*.jvm.gc.collectors.old.collection_count,nodes.*.jvm.gc.collectors.old.collection_time_in_millis' | jq
- Проверить состояние кластера и шардов:
curl -s 'localhost:9200/_cluster/health?pretty'
curl -s 'localhost:9200/_cat/shards?h=index,shard,prirep,state,node,unassigned.reason&s=state'
Срочные действия
- Снять нагрузку с проблемной ноды:
- уменьшить тяжелые агрегации/поисковые джобы;
-
снизить ingest, если есть такая возможность.
-
Быстро освободить heap-память от кешей (временно):
curl -s -X POST 'localhost:9200/_cache/clear?fielddata=true&query=true&request=true&pretty'
- Уменьшить давление от шардов:
curl -s 'localhost:9200/_cat/indices?format=json&h=index,pri,rep,store.size,docs.count' \
| jq -r '.[] | [.index, .pri, .rep, ((.pri|tonumber) * ((.rep|tonumber)+1)), ."store.size"] | @tsv' \
| sort -k4,4nr | head -30
- Удалить только подтвержденные устаревшие индексы:
curl -s -X DELETE 'localhost:9200/<old-index-name>?pretty'
Пост-инцидентные действия
- Проверить соответствие heap и ресурсов pod:
Xms/Xmxдолжны быть одинаковыми;- heap обычно не больше 50% доступной памяти ноды/контейнера.
- Устранить причины роста heap:
- oversharding;
- очень большие bucket-агрегации;
- слишком крупные bulk-запросы;
- неконтролируемый рост индексов без retention.
Источник
"Elasticsearch heap size usage and JVM garbage collection"
https://www.elastic.co/search-labs/blog/elasticsearch-heap-size-jvm-garbage-collection