诊断 429 拒绝、heap 和断路器压力
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 状态、断路器触发、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。在 text 字段上启用 fielddata 会快速消耗 heap。