Настройка разрывов цепи
Elasticsearch содержит несколько разрывов цепи, используемых для предотвращения операций, использующих чрезмерное количество памяти. Каждый разрыв отслеживает используемую память определёнными операциями и устанавливает предел для того, сколько памяти он может отслеживать. Кроме того, есть разрыв на уровне родительского элемента, который определяет общее количество памяти, которое может быть отслежено во всех разрывах.
Когда разрыв цепи достигает своего предела, Elasticsearch отклонит дальнейшие операции. См. ошибки разрывов цепи для получения информации об ошибках, генерируемых разрывами цепи.
Разрывы цепи не отслеживают все использование памяти в Elasticsearch и поэтому обеспечивают только неполную защиту от чрезмерного использования памяти. Если Elasticsearch использует слишком много памяти, это может привести к проблемам с производительностью, и узлы могут даже выйти из строя с ошибкой OutOfMemoryError. Обратитесь к высокому давлению на память JVM для получения помощи в устранении неполадок с высоким использованием кучи.
За исключением случаев, когда указано иное, эти настройки можно динамически обновлять в действующем кластере с помощью API cluster-update-settings.
Дополнительная информация об ошибках разрывов цепи приведена в описании ошибок разрывов цепи.
Родительский разрыв цепи
Родительский разрыв цепи можно настроить с помощью следующих параметров:
-
indices.breaker.total.use_real_memory - (Статический) Определяет, должен ли родительский разрыв учитывать фактическое использование физической памяти (
true) или только количество, зарезервированное дочерними разрывами цепи (false). По умолчанию значениеtrue.
-
indices.breaker.total.limit - (Динамический) Начальный предел для родительского разрыва цепи. По умолчанию составляет 70% кучи JVM, если
indices.breaker.total.use_real_memoryfalse. Еслиindices.breaker.total.use_real_memorytrue, по умолчанию составляет 95% кучи JVM.
Разрыв цепи данных полей
Разрыв цепи данных полей оценивает объем памяти кучи, необходимой для загрузки поля в кэш данных полей. Если загрузка поля приведет к превышению предварительно определенного лимита памяти, разрыв цепи остановит операцию и вернёт ошибку.
-
indices.breaker.fielddata.limit - (Динамический) Предел для разрыва цепи fielddata. По умолчанию составляет 40% кучи JVM.
-
indices.breaker.fielddata.overhead - (Динамический) Постоянная величина, на которую умножаются все оценки данных полей для определения окончательной оценки. По умолчанию
1.03.
Разрыв цепи запросов
Разрыв цепи запросов позволяет Elasticsearch предотвратить превышение определённого объёма памяти структурами данных на уровне отдельных запросов (например, память, используемая для вычисления агрегаций во время запроса).
-
indices.breaker.request.limit - (Динамический) Предел для разрыва цепи запросов, по умолчанию 60% кучи JVM.
-
indices.breaker.request.overhead - (Динамический) Постоянная величина, на которую умножаются все оценки запросов для определения окончательной оценки. По умолчанию
1.
Разрыв цепи активных запросов
Разрыв цепи активных запросов позволяет Elasticsearch ограничить использование памяти всеми текущими активными входящими запросами на уровне транспорта или HTTP, предотвращая превышение определенного объема памяти на узле. Использование памяти основано на длине содержимого запроса. Этот разрыв цепи также учитывает, что память нужна не только для представления исходного запроса, но и как структурированного объекта, что отражено в базовой накладных расходах.
-
network.breaker.inflight_requests.limit - (Динамический) Предел для разрыва цепи активных запросов, по умолчанию 100% кучи JVM. Это означает, что он ограничен пределом, настроенным для родительского разрыва цепи.
-
network.breaker.inflight_requests.overhead - (Динамический) Постоянная величина, на которую умножаются все оценки активных запросов для определения окончательной оценки. По умолчанию 2.
Разрыв цепи учёта запросов
Разрыв цепи учёта запросов позволяет Elasticsearch ограничить использование памяти для элементов, хранящихся в памяти, которые не освобождаются при завершении запроса. Это включает в себя такие вещи, как память сегмента Lucene.
-
indices.breaker.accounting.limit - (Динамический) Предел для разрыва цепи учёта, по умолчанию 100% кучи JVM. Это означает, что он ограничен пределом, настроенным для родительского разрыва цепи.
-
indices.breaker.accounting.overhead - (Динамический) Постоянная величина, на которую умножаются все оценки учёта для определения окончательной оценки. По умолчанию 1
Разрыв цепи компиляции скриптов
Несколько отличающийся от предыдущих разрывов цепи на основе памяти, разрыв цепи компиляции скриптов ограничивает количество компиляций встроенных скриптов в определённый промежуток времени.
Дополнительную информацию см. в разделе «prefer-parameters» документации по скриптам.
-
script.max_compilations_rate - (Динамический) Предел для количества уникальных динамических скриптов в определённом интервале, которые разрешается компилировать. По умолчанию
150/5m, что означает 150 каждые 5 минут.
Разрыв цепи регулярных выражений
Неправильно написанные регулярные выражения могут ухудшить стабильность и производительность кластера. Разрыв цепи регулярных выражений ограничивает использование и сложность регулярных выражений в скриптах Painless.
-
script.painless.regex.enabled -
(Статический) Включает регулярные выражения в скриптах Painless. Допустимые значения:
-
limited(По умолчанию) - Включает регулярные выражения, но ограничивает сложность с помощью настройки кластера
script.painless.regex.limit-factor. -
true - Включает регулярные выражения без ограничений сложности. Отключает разрыв цепи регулярных выражений.
-
false - Отключает регулярные выражения. Любой скрипт Painless, содержащий регулярное выражение, вернёт ошибку.
-
-
script.painless.regex.limit-factor -
(Статический) Ограничивает количество символов, которые может учитывать регулярное выражение в скрипте Painless. Elasticsearch вычисляет этот предел, умножив значение настройки на длину символов входных данных скрипта.
Например, вход
foobarbazимеет длину9. Еслиscript.painless.regex.limit-factorравно6, регулярное выражение дляfoobarbazможет учитывать до 54 (9 * 6) символов. Если выражение превышает этот предел, это активирует разрыв цепи регулярных выражений и вернёт ошибку.Elasticsearch применяет это ограничение только если
script.painless.regex.enabledравноlimited.
© 2023-2025 Elasticsearch
As of September 2024, Elasticsearch is available under a choice of three licenses: the Server Side Public License (SSPL), the Elastic License, or the AGPLv3 (OSI approved).
Elasticsearch and the Elasticsearch logo are trademarks of Elasticsearch B.V., registered in the U.S. and in other countries.
https://www.elastic.co/guide/en/elasticsearch/reference/7.17/circuit-breaker.html