断路器

     es包含多个断路器用来避免会引起OOM的操作。每个断路器指定可以使用的内存限制。还有一个parent级别的断路器指定所有断路器可以使用的总内存。

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%。

Field data断路器

       field data断路器估算将字段加载到field data cache所需的堆内存。如果加载该字段将导致缓存超过预定义的内存限制,则断路器将停止操作并返回错误。

       indices.breaker.fielddata.limit:(动态设置)fielddata断路器的限制。默认为JVM堆内存的40%。

       indices.breaker.fielddata.overhead:(动态设置)与所有字段数据估计值相乘以确定最终估计值的常数。默认为1.03。

Request断路器

  请求断路器使es可以防止每个请求的数据结构(例如,用于在请求期间计算聚合的内存)超过一定数量的内存。

   indices.breaker.request.limit:(动态设置)请求断路器的限制,默认为JVM堆内存的60%

        indices.breaker.request.overhead:(动态设置)所有请求估计值都将与该常数相乘以确定最终估计值。默认为1。

进行中请求断路器

  进行中请求断路器使es可以限制transport或http级别上所有当前活动的即将传入请求的内存使用,以免超出节点上的特定内存量。内存使用情况取决于请求本身的内容长度。该断路器还认为,不仅需要内存来表示原始请求,而且还需要将其作为结构化对象,这由默认开销反映出来。

  • network.breaker.inflight_requests.limit
    (动态设置)进行中请求断路器的限制,默认为JVM堆内存的100%。这意味着它受到父级断路器配置的限制。
  • network.breaker.inflight_requests.overhead
    (动态设置)一个常数,所有进行中请求估计值都将与该常数相乘以确定最终估计值。默认为2。
{
  'error': {
    'type': 'circuit_breaking_exception',
    'reason': '[parent] Data too large, data for [<http_request>] would be [123848638/118.1mb], which is larger than the limit of [123273216/117.5mb], real usage: [120182112/114.6mb], new bytes reserved: [3666526/3.4mb]',
    'bytes_wanted': 123848638,
    'bytes_limit': 123273216,
    'durability': 'TRANSIENT'
  },
  'status': 429
}

 

posted on 2023-03-14 22:27  溪水静幽  阅读(150)  评论(0)    收藏  举报