原因以及如何调试 Elasticsearch CircuitBreakingException

Cause and how to debug Elasticsearch CircuitBreakingException

我想知道这个错误的变量情况。

> CircuitBreakingException[[parent] Data too large, data for
> [<transport_request>] would be [32633199948/30.3gb],  which is larger
> than the limit of [32573515366/30.3gb], real usage:
> [32633199624/30.3gb], new bytes reserved: [324/324b] , usages
> [request=0/0b, fielddata=182494625/174mb, 
> in_flight_requests=332048906/316.6mb, accounting=908301644/866.2mb]]

时有发生,但不知道为什么。

首先,防止 elasticsearch 集群内存不足错误是一件好事,如 official ES link 中所述。

Elasticsearch contains multiple circuit breakers used to prevent operations from causing an OutOfMemoryError. Each breaker specifies a limit for how much memory it can use. Additionally, there is a parent-level breaker that specifies the total amount of memory that can be used across all breakers.

现在查看您的异常,我们可以得出一些结论,这将帮助您调试这些偶发问题,并为同一 link 中提到的 Elasticsearch 中可用的不同断路器设置更好的限制:

  1. 鉴于异常消息中提到的 [parent] Data too large 父限制发生断路器。
  2. official link for in-flight circuit breaker 异常消息中提到的 in_flight_requests 某些正在进行的请求会发生这种情况。
  3. 由于它不是现场数据断路器和飞行中的断路器,因此当时执行非常昂贵的搜索请求的可能性很高。
  4. 您应该将父断路器的 JVM 减少到更小的值,目前,通过查看您的异常,它似乎使用了 95% 的 JVM,可以找到有关如何设置这些的更多信息 here.