circuit_breaking_exception: CircuitBreakingException[[parent] Data too large, data for [<...>] would be [...], which is larger than the limit of [...]](数据过大,超过熔断器限制)
Elasticsearch含义
由于请求将超出内存(堆)熔断器限制而被拒绝。Elasticsearch 预先终止该请求,以防节点因 OutOfMemoryError 崩溃。[parent] 熔断器控制总内存使用;[fielddata] 熔断器控制 text 字段上的 fielddata 内存。
原因
JVM 堆不足、非常大/复杂的聚合、大型结果集、大型 bulk 请求、在 text 字段上加载 fielddata,或大量并发重型查询占满堆。通常是堆压力的症状。
解决方法
缩小查询:减少聚合规模、bulk 批次大小和返回字段。在 keyword 子字段(.keyword)上聚合,而不是使用 text 字段上的 fielddata。增大 JVM 堆(约为服务器 RAM 的 50%,最多约 31GB)。监控堆压力:GET _cat/nodes?v&h=name,heap.percent。解决根本原因(内存/查询),而不是临时提高熔断器限制。用 GET _nodes/stats/breaker 检查是哪个熔断器触发的。
同一数据库的其他条目
- cluster_block_exceptionClusterBlockException[blocked by: [TOO_MANY_REQUESTS/12/disk usage exceeded flood-stage watermark, index has read-only-allow-delete block]] (before 7.x: FORBIDDEN/12/index read-only / allow delete (api))(磁盘使用超过 flood-stage 水位线,索引被设为 read-only-allow-delete)
- index_read_only_allow_deleteTOO_MANY_REQUESTS/12/disk usage exceeded flood-stage watermark, index has read-only-allow-delete block (legacy: FORBIDDEN/12/index read-only / allow delete (api))(磁盘使用超过 flood-stage 水位线,索引带有 read-only-allow-delete 块)
- high_disk_watermark_exceededhigh disk watermark [90%] exceeded / flood stage disk watermark [95%] exceeded(超过磁盘 high 水位线 [90%] / flood stage 水位线 [95%])
- mapper_parsing_exceptionmapper_parsing_exception: failed to parse field [...] of type [...](无法解析类型为 [...] 的字段 [...])
- strict_dynamic_mapping_exceptionstrict_dynamic_mapping_exception: mapping set to strict, dynamic introduction of [...] within [...] is not allowed(mapping 设为 strict,不允许动态添加字段)
- illegal_argument_exception_fielddataillegal_argument_exception: Fielddata is disabled on text fields by default. Set fielddata=true on [your_field] in order to load fielddata in memory(text 字段默认禁用 fielddata)
- search_phase_execution_exceptionsearch_phase_execution_exception: all shards failed / Failed to execute phase [query](所有分片均失败 / 执行 [query] 阶段失败)