对应7.10官方文档路径:Set up Elasticsearch » Configuring Elasticsearch » Circuit
官方地址如下:
https://www.elastic.co/guide/en/elasticsearch/reference/7.10/circuit-breaker.html
断路器设置
es包含多个断路器用来避免会引起OOM的操作。每个断路器指定了可以使用的内存限制。另外还有一个parent级别的断路器指定所有断路器可以使用的总内存。
除非有特别说明,所有设置均可在活动集群上使用集群设置更新API进行动态更新。
1. Parent断路器
父级别断路器可以通过以下参数设置:
-
indices.breaker.total.use_real_memory
(静态设置)确定父断路器考虑实际内存使用(true)还是仅考虑子断路器保留的内存量(false)。默认为true -
indices.breaker.total.limit
(动态设置)父断路器启动限制。如果indices.breaker.total.use_real_memory
设置为false
,则默认值为JVM堆内存的70%,如果indices.breaker.total.use_real_memory
设置为true
,则默认值为JVM堆内存的95%。
2. Field data断路器
field data断路器估算将字段加载到field data cache所需的堆内存。如果加载该字段将导致缓存超过预定义的内存限制,则断路器将停止操作并返回错误。
-
indices.breaker.fielddata.limit
(动态设置)fielddata断路器的限制。默认为JVM堆内存的40%。 -
indices.breaker.fielddata.overhead
(动态设置)与所有字段数据估计值相乘以确定最终估计值的常数。默认为1.03。
3. Request断路器
请求断路器使es可以防止每个请求的数据结构(例如,用于在请求期间计算聚合的内存)超过一定数量的内存。
-
indices.breaker.request.limit
(动态设置)请求断路器的限制,默认为JVM堆内存的60%。 -
indices.breaker.request.overhead
(动态设置)所有请求估计值都将与该常数相乘以确定最终估计值。默认为1。
4. 进行中请求断路器
进行中请求断路器使es可以限制transport或http级别上所有当前活动的即将传入请求的内存使用,以免超出节点上的特定内存量。内存使用情况取决于请求本身的内容长度。该断路器还认为,不仅需要内存来表示原始请求,而且还需要将其作为结构化对象,这由默认开销反映出来。
- network.breaker.inflight_requests.limit
(动态设置)进行中请求断路器的限制,默认为JVM堆内存的100%。这意味着它受到父级断路器配置的限制。 - network.breaker.inflight_requests.overhead
(动态设置)一个常数,所有进行中请求估计值都将与该常数相乘以确定最终估计值。默认为2。
5. 计费请求短裤器
计费断路器允许限制请求完成后未释放的内存中所保存内容的内存使用量。这包括Lucene段内存之类的东西。
- indices.breaker.accounting.limit
(动态设置)计费断路器的限制,默认为JVM堆内存的100%。这意味着它受到父级断路器配置的限制。 - indices.breaker.accounting.overhead
(动态设置)与所有计费估计值相乘以确定最终估计值的常数。默认为1。
6. 脚本编译断路器
脚本编译断路器与以前的基于内存的断路器略有不同,它限制了一段时间内内联脚本编译的次数。
有关 更多信息,请参见脚本文档的“首选参数”部分。
- script.context.$CONTEXT.max_compilations_rate
(动态设置)在给定上下文中允许在一定间隔内唯一动态脚本的数量限制。默认为75/5m,表示每5分钟75次。