В OpenSearch реализована концепция автоматических выключателей для борьбы с ошибками OutOfMemory, которые приводят к сбоям в работе узлов. Когда запрос поступает на узлы OpenSearch, автоматические выключатели сначала оценивают объем памяти, необходимый для загрузки требуемых данных. Затем они сравнивают предполагаемый объем с настроенным ограничением размера кучи. Если предполагаемый размер превышает размер кучи, запрос завершается и выбрасывается исключение, чтобы избежать загрузки узлом большего объема памяти, чем доступно.
Для чего они используются
В OpenSearch есть несколько выключателей, таких как fielddata, requests, network, indices и script compilation. Каждый выключатель используется для ограничения памяти, которую может использовать операция. Кроме того, в OpenSearch есть родительский выключатель, который используется для ограничения совокупной памяти, используемой всеми остальными выключателями.
Примеры
Увеличение размера автоматического выключателя для предела полевых данных - По умолчанию предел для выключателей полевых данных составляет 40 %. Следующая команда может быть использована для увеличения этого значения до 60 %:
1 2 3 4 5 6 | PUT /_cluster/settings { "persistent": { "indices.breaker.fielddata.limit": "60%" } } |
Примечания
- Каждый прерыватель поставляется с лимитами по умолчанию, и их лимиты также могут быть изменены. Но это настройка экспертного уровня, и вам следует внимательно изучить все подводные камни, прежде чем изменять лимиты, иначе узел может начать выбрасывать исключения OOM.
- Иногда лучше провалить запрос, чем получить исключение OOM, потому что при появлении OOM JVM становится невосприимчивой.
- Важно держать indices.breaker.request.limit ниже, чем indices.breaker.total.limit, чтобы выключатели запросов срабатывали раньше, чем выключатели общего объема.
Общие проблемы
- Наиболее распространенной ошибкой, возникающей при работе с автоматическими выключателями, является "data too large" с кодом состояния 429. Приложение должно быть готово к обработке таких исключений.
- Если приложение начинает выбрасывать исключения из-за ограничений автоматического выключателя, необходимо пересмотреть запросы и требования к памяти. В большинстве случаев требуется масштабирование путем добавления дополнительных ресурсов в кластер.