lower fielddata circuit breaker's default limit (#27162)

* Lower fielddata circuit breaker default limit

Lower fielddata circuit breaker default limit from 60% to 40% as we have
moved to doc_values for most of the cases.

* merge master in

* update tests

* update docs
This commit is contained in:
Yu 2018-12-11 18:30:58 +08:00 committed by Daniel Mitterdorfer
parent c635904a1b
commit d01b30acba
4 changed files with 11 additions and 4 deletions

View File

@ -92,6 +92,13 @@ heap memory instead of only considering the reserved memory by child circuit bre
setting is `true`, the default parent breaker limit also changes from 70% to 95% of the JVM heap size. setting is `true`, the default parent breaker limit also changes from 70% to 95% of the JVM heap size.
The previous behavior can be restored by setting `indices.breaker.total.use_real_memory` to `false`. The previous behavior can be restored by setting `indices.breaker.total.use_real_memory` to `false`.
[float]
==== Field data circuit breaker changes
As doc values have been enabled by default in earlier versions of Elasticsearch,
there is less need for fielddata. Therefore, the default value of the setting
`indices.breaker.fielddata.limit` has been lowered from 60% to 40% of the JVM
heap size.
[float] [float]
==== `fix` value for `index.shard.check_on_startup` is removed ==== `fix` value for `index.shard.check_on_startup` is removed

View File

@ -32,12 +32,12 @@ The parent-level breaker can be configured with the following settings:
The field data circuit breaker allows Elasticsearch to estimate the amount of The field data circuit breaker allows Elasticsearch to estimate the amount of
memory a field will require to be loaded into memory. It can then prevent the memory a field will require to be loaded into memory. It can then prevent the
field data loading by raising an exception. By default the limit is configured field data loading by raising an exception. By default the limit is configured
to 60% of the maximum JVM heap. It can be configured with the following to 40% of the maximum JVM heap. It can be configured with the following
parameters: parameters:
`indices.breaker.fielddata.limit`:: `indices.breaker.fielddata.limit`::
Limit for fielddata breaker, defaults to 60% of JVM heap Limit for fielddata breaker, defaults to 40% of JVM heap
`indices.breaker.fielddata.overhead`:: `indices.breaker.fielddata.overhead`::

View File

@ -66,7 +66,7 @@ public class HierarchyCircuitBreakerService extends CircuitBreakerService {
}, Property.Dynamic, Property.NodeScope); }, Property.Dynamic, Property.NodeScope);
public static final Setting<ByteSizeValue> FIELDDATA_CIRCUIT_BREAKER_LIMIT_SETTING = public static final Setting<ByteSizeValue> FIELDDATA_CIRCUIT_BREAKER_LIMIT_SETTING =
Setting.memorySizeSetting("indices.breaker.fielddata.limit", "60%", Property.Dynamic, Property.NodeScope); Setting.memorySizeSetting("indices.breaker.fielddata.limit", "40%", Property.Dynamic, Property.NodeScope);
public static final Setting<Double> FIELDDATA_CIRCUIT_BREAKER_OVERHEAD_SETTING = public static final Setting<Double> FIELDDATA_CIRCUIT_BREAKER_OVERHEAD_SETTING =
Setting.doubleSetting("indices.breaker.fielddata.overhead", 1.03d, 0.0d, Property.Dynamic, Property.NodeScope); Setting.doubleSetting("indices.breaker.fielddata.overhead", 1.03d, 0.0d, Property.Dynamic, Property.NodeScope);
public static final Setting<CircuitBreaker.Type> FIELDDATA_CIRCUIT_BREAKER_TYPE_SETTING = public static final Setting<CircuitBreaker.Type> FIELDDATA_CIRCUIT_BREAKER_TYPE_SETTING =

View File

@ -68,7 +68,7 @@ public class MemorySizeSettingsTests extends ESTestCase {
assertMemorySizeSetting(HierarchyCircuitBreakerService.TOTAL_CIRCUIT_BREAKER_LIMIT_SETTING, "indices.breaker.total.limit", assertMemorySizeSetting(HierarchyCircuitBreakerService.TOTAL_CIRCUIT_BREAKER_LIMIT_SETTING, "indices.breaker.total.limit",
new ByteSizeValue((long) (JvmInfo.jvmInfo().getMem().getHeapMax().getBytes() * defaultTotalPercentage))); new ByteSizeValue((long) (JvmInfo.jvmInfo().getMem().getHeapMax().getBytes() * defaultTotalPercentage)));
assertMemorySizeSetting(HierarchyCircuitBreakerService.FIELDDATA_CIRCUIT_BREAKER_LIMIT_SETTING, "indices.breaker.fielddata.limit", assertMemorySizeSetting(HierarchyCircuitBreakerService.FIELDDATA_CIRCUIT_BREAKER_LIMIT_SETTING, "indices.breaker.fielddata.limit",
new ByteSizeValue((long) (JvmInfo.jvmInfo().getMem().getHeapMax().getBytes() * 0.6))); new ByteSizeValue((long) (JvmInfo.jvmInfo().getMem().getHeapMax().getBytes() * 0.4)));
assertMemorySizeSetting(HierarchyCircuitBreakerService.REQUEST_CIRCUIT_BREAKER_LIMIT_SETTING, "indices.breaker.request.limit", assertMemorySizeSetting(HierarchyCircuitBreakerService.REQUEST_CIRCUIT_BREAKER_LIMIT_SETTING, "indices.breaker.request.limit",
new ByteSizeValue((long) (JvmInfo.jvmInfo().getMem().getHeapMax().getBytes() * 0.6))); new ByteSizeValue((long) (JvmInfo.jvmInfo().getMem().getHeapMax().getBytes() * 0.6)));
assertMemorySizeSetting(HierarchyCircuitBreakerService.IN_FLIGHT_REQUESTS_CIRCUIT_BREAKER_LIMIT_SETTING, assertMemorySizeSetting(HierarchyCircuitBreakerService.IN_FLIGHT_REQUESTS_CIRCUIT_BREAKER_LIMIT_SETTING,