2014-02-11 3 views
6

One of the biggest causes of instability in Elasticsearch is fielddata: field values have to be loaded into memory to make aggregations, sorting and scripting perform as fast as they do.Elasticsearch - Different между indices.fielddata.cache.size и indices.fielddata.breaker.limit

В приведенном выше описании на Elasticsearch странице, большой fielddata всегда вызывает Elasticsearch из памяти (ООМ). Таким образом, мы можем установить indices.fielddata.cache.size и indices.fielddata.breaker.limit предотвратить OOM. В чем разница между этими двумя настройками? Имеют ли они какое-либо отношение?

Например, My Elasticsearch JVM имеет общую память 2g. Если установить indices.fielddata.cache.size до 1 г, но indices.fielddata.breaker.limit набор до 60% (что означает 1,2 г). Полевые данные, разрешенные для загрузки в память, превышают размер кеша fielddata. Это приведет к какой-либо ошибке? (Reference Fielddata)

спасибо.

ответ

11

После долгого исследования я нашел ответ.

Когда вы установили indices.fielddata.cache.size в 1g. Это означает, сколько полей elachesearch кеша поля может использовать для обработки запроса запроса. Но когда вы устанавливаете indices.fielddata.breaker.limit - 60% (означает 1,2g). Если данные запроса больше этого размера, elasticsearch отклонит этот запрос и вызовет исключение.

Таким образом, если данные запроса меньше 1,2 г, но больше 1 г, elassticsearch примет этот запрос. После достижения indices.fielddata.cache.size старые данные будут скрыты и освободят память для новых данных.

2

Их разница в том, цитирую

Fielddata размер проверяется после загрузки данных. Что произойдет, если появится запрос, который пытается загрузить больше в полевые данные, чем доступная память? Ответ уродливый: вы получите OutOfMemoryException.

Elasticsearch включает в себя автоматический выключатель fielddata, предназначенный для решения этой проблемы. Автоматический выключатель оценивает требования к памяти запроса, исследуя вовлеченные области (их тип, мощность, размер и т. Д.). Затем он проверяет, будет ли загружать требуемые полевые данные, чтобы скопировать общий размер полевой информации по заданному проценту кучи.

Если расчетный размер запроса больше предела, автоматический выключатель отключается и запрос прерывается и возвращает исключение. Это происходит до загрузки данных, а это означает, что вы не будете удалять OutOfMemoryException.

от Limiting Memory Usage.

Смежные вопросы