原英文版地址: https://www.elastic.co/guide/en/elasticsearch/reference/7.7/circuit-breaker.html, 原文档版权归 www.elastic.co 所有
本地英文版地址: ../en/circuit-breaker.html

熔断机制设置 (Circuit breaker settings)

ElasticSearch包含多个 熔断器(circuit breaker),用于防止操作引起的内存不足错误(OutOfMemoryError)。 每个熔断器都指定了它可以使用多少内存的限制。 此外,还有一个父级熔断器,它指定所有断路器可以使用的内存总量。

除非另有说明,否则可以使用 集群更新设置 API 在运行中的集群上动态更新这些设置。

父级熔断器 (Parent circuit breaker)

父级熔断器可以通过以下设置进行配置:

indices.breaker.total.use_real_memory
静态(Static)设置,决定父级熔断器应考虑实际内存使用(true)还是仅考虑子熔断器预留的数量(false)。默认为 true
indices.breaker.total.limit
父级熔断器总体的起始限制。 当indices.breaker.total.use_real_memory设置为 false 时,默认为 JVM 堆的70%; 设置为 true 时, 默认为 JVM 堆的 95%。

字段数据熔断器 (Field data circuit breaker)

字段数据熔断器允许 Elasticsearch 预估一个字段加载到内存中需要的内存大小。 然后,它可以通过抛出异常来阻止字段数据加载。 默认情况下,这个限制被配置为 JVM 堆最大大小的 40%。 可以使用以下参数来配置:

indices.breaker.fielddata.limit
字段数据熔断器的限制,默认为 JVM 堆的40%
indices.breaker.fielddata.overhead
一个常数,所有字段数据预估值乘以该常数以确定最终估计值。默认为 1.03

请求熔断器 (Request circuit breaker)

请求熔断器允许 Elasticsearch 防止每个请求的数据结构(例如,请求期间用于聚合计算的内存)超过一定的内存量。

indices.breaker.request.limit
请求熔断器的限制,默认为 JVM 堆的60%
indices.breaker.request.overhead
一个常数,所有请求的预估值都要乘以这个常数才能确定最终的估计值。默认为 1

请求队列熔断器 (In flight requests circuit breaker)

译者注: In flight requests, 是 client 的请求队列, 包括正在发送的请求和已经发送的但还没有接收到response的请求
请求队列熔断器允许 Elasticsearch 限制 传输 或 HTTP 级别上所有当前活动的传入请求的内存使用,使其不超过该节点的一定的内存量。 内存使用量基于请求自身的内容的长度。 该熔断器还认为,内存不仅需要表示原始请求,而且也是一个反映默认开销的结构化对象。

network.breaker.inflight_requests.limit
请求队列的限制,默认为 JVM 堆的100%。 这异味着它受到为父级熔断器配置的限制的约束。
network.breaker.inflight_requests.overhead
一个常数,所有请求队列预估值都要乘以这个常数才能确定最终的预估值。默认为 2。

核算请求熔断器 (Accounting requests circuit breaker)

核算请求熔断器允许 Elasticsearch 限制保存在内存中的东西的内存使用,这些东西在请求完成时不会被释放。 这包括像 Lucene 段内存这样的东西。

indices.breaker.accounting.limit
核算请求的限制,默认为 JVM 堆的100%。这异味着它受到为父级熔断器配置的限制的约束。
indices.breaker.accounting.overhead
一个常数,所有核算预估值都要乘以这个常数来确定最终的预估值。默认为 1

脚本编译熔断器 (Script compilation circuit breaker)

与以前的基于内存的熔断器略有不同,脚本编译熔断器限制了一段时间内的内联脚本编译数量。

更多信息请参考文档 脚本(scripting) 的 "首选参数 (prefer-parameters)" 部分。

script.max_compilations_rate
在一定时间间隔内允许编译的唯一动态脚本的数量限制。默认为 75 / 5m,即每 5 分钟 75 个。