Диагностика отказов 429, давления на heap и circuit breaker
ElasticsearchПроизводительностьКоманда
# Thread pool queue and rejection counts (source of 429):
GET _cat/thread_pool/write,search,get?v&h=node_name,name,active,queue,rejected,completed,size,queue_size&s=rejected:desc
GET _cat/nodes?v&h=name,node.role,heap.percent,ram.percent,cpu,load_1m,disk.used_percent,master&s=heap.percent:desc
# Circuit breaker trips and parent breaker usage:
GET _nodes/stats/breaker?filter_path=nodes.*.name,nodes.*.breakers.*.tripped,nodes.*.breakers.parent
GET _nodes/stats/jvm?filter_path=nodes.*.name,nodes.*.jvm.mem.heap_used_percent,nodes.*.jvm.gc.collectors.old
# Fielddata memory usage (per field):
GET _nodes/stats/indices/fielddata?fields=*&filter_path=nodes.*.indices.fielddataЧто делает
Показывает запросы, отклонённые из-за заполненных очередей пулов потоков write/search, состояние heap/CPU по узлам, срабатывания circuit breaker, число old GC и использование памяти fielddata.
Когда использовать
Когда клиенты получают 429 Too Many Requests или es_rejected_execution_exception, появляется CircuitBreakingException ([parent] Data too large) или узлы страдают от долгих пауз GC.
Внимание
Счётчики rejected накапливаются с момента запуска узла; смотрите на прирост между двумя замерами. Увеличение queue_size скрывает отказы, но увеличивает heap и задержки; настоящее решение — уменьшить размер bulk/конкурентность или добавить мощности. Если heap стабильно выше 85% и old GC выполняется часто, узел приближается к OOM. Включение fielddata на поле text быстро расходует heap.