首页/数据/NoSQL 速查/断路器 circuit breaker 与内存保护
Elasticsearch89 条

断路器 circuit breaker 与内存保护

断路器防止聚合、请求或 fielddata 占用过多堆内存:父断路器默认限制在堆的 70%,触发时返回 429 与 circuit_breaking_exception。

NoSQL 速查数据更新于 2026-10-12
相关设置indices.breaker.total.limit、indices.breaker.fielddata.limit、indices.breaker.request.limit
默认水位父断路器 70% 堆、fielddata 40% 堆,属于集群级持久设置
触发表现请求返回 429,message 含 data too large 或 circuit_breaking

示例

示例
PUT /_cluster/settings
{
  "persistent": {
    "indices.breaker.total.limit": "70%"
  }
}

GET /_nodes/stats/breaker?filter_path=nodes.*.breakers.parent
断路器是保护不是根因:频繁触发说明查询模式(大聚合、深分页、脚本)或堆容量需要调整。

易错点

  • 调大 limit 只是把风险后移,过量内存分配最终会压垮 GC 甚至 OOM
  • fielddata 触发多来自对 text 字段排序聚合,根治方式是改用 keyword

数据来源与参考

  • Elasticsearch Guide: Circuit breaker settings
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌