Spec-Zone.ru › Elasticsearch 8
›Руководство по Elasticsearch [8.17] ›Настройка Elasticsearch ›Настройка Elasticsearch

Пулы потоков

Узел использует несколько пулов потоков для управления потреблением памяти. Очереди, связанные со многими пулами потоков, позволяют удерживать ожидающие запросы вместо их отбрасывания.

Существует несколько пулов потоков, но важными являются:

generic
Для общих операций (например, обнаружения узла в фоновом режиме). Тип пула потоков — scaling.
search
Для операций подсчета/поиска на уровне фрагмента. Также используется операциями извлечения и другими операциями, связанными с поиском. Тип пула потоков — fixed с размером int((# of allocated processors * 3) / 2) + 1 и размером очереди 1000.
search_throttled
Для операций подсчета/поиска/предложений/получения документов на search_throttled indices. Тип пула потоков — fixed с размером 1 и размером очереди 100.
search_coordination
Для лёгких координационных операций, связанных с поиском. Тип пула потоков — fixed с размером (# of allocated processors) / 2 и размером очереди 1000.
get
Для операций получения (get). Тип пула потоков — fixed с размером int((# of allocated processors * 3) / 2) + 1 и размером очереди 1000.
analyze
Для запросов анализа. Тип пула потоков — fixed с размером 1, размером очереди 16.
write
Для операций индексации/удаления/обновления одного документа, процессоров ingest и запросов bulk. Тип пула потоков — fixed с размером # of allocated processors, размером очереди 10000. Максимальный размер этого пула — 1 + # of allocated processors.
snapshot
Для операций создания/восстановления моментальных снимков. Тип пула потоков — scaling с временем ожидания 5m. На узлах с кучей не менее 750 МБ максимальный размер этого пула по умолчанию — 10. На узлах с кучей менее 750 МБ максимальный размер этого пула по умолчанию — min(5, (# of allocated processors) / 2).
snapshot_meta
Для операций чтения метаданных репозитория моментальных снимков. Тип пула потоков — scaling с временем ожидания 5m и максимальным размером min(50, (# of allocated processors* 3)).
warmer
Для операций предварительного разогрева сегментов. Тип пула потоков — scaling с временем ожидания 5m и максимальным размером min(5, (# of allocated processors) / 2).
refresh
Для операций обновления. Тип пула потоков — scaling с временем ожидания 5m и максимальным размером min(10, (# of allocated processors) / 2).
fetch_shard_started
Для перечисления состояний фрагментов. Тип пула потоков — scaling с временем ожидания 5m и максимальным размером по умолчанию 2 * # of allocated processors.
fetch_shard_store
Для перечисления хранилищ фрагментов. Тип пула потоков — scaling с временем ожидания 5m и максимальным размером по умолчанию 2 * # of allocated processors.
flush
Для операций flush и translog fsync. Тип пула потоков — scaling с временем ожидания 5m и максимальным размером по умолчанию min(5, (# of allocated processors) / 2).
force_merge
Для операций force merge. Тип пула потоков — fixed с размером max(1, (# of allocated processors) / 8) и неограниченным размером очереди.
management
Для управления кластером. Тип пула потоков — scaling с временем ожидания 5m и максимальным размером по умолчанию 5.
system_read
Для операций чтения системных индексов. Тип пула потоков — fixed с максимальным размером по умолчанию min(5, (# of allocated processors) / 2).
system_write
Для операций записи в системные индексы. Тип пула потоков — fixed с максимальным размером по умолчанию min(5, (# of allocated processors) / 2).
system_critical_read
Для критических операций чтения системных индексов. Тип пула потоков — fixed с максимальным размером по умолчанию min(5, (# of allocated processors) / 2).
system_critical_write
Для критических операций записи в системные индексы. Тип пула потоков — fixed с максимальным размером по умолчанию min(5, (# of allocated processors) / 2).
watcher
Для выполнений задач Watcher. Тип пула потоков — fixed с максимальным размером по умолчанию min(5 * (# of allocated processors), 50) и размером очереди 1000.
esql_worker
Выполняет операции ES|QL. Тип пула потоков — fixed с размером int((# of allocated processors * 3) / 2) + 1 и размером очереди 1000.

Настройки пулов потоков являются статическими и могут быть изменены путём редактирования elasticsearch.yml. Изменение конкретного пула потоков можно произвести, задав параметры, специфичные для типа; например, изменение числа потоков в пуле write потоков:

thread_pool:
    write:
        size: 30

Типы пулов потоков

Ниже приведены типы пулов потоков и соответствующие параметры:

fixed

Пул потоков fixed содержит фиксированное число потоков для обработки запросов с очередью (необязательно ограниченной) для ожидающих запросов, которым не хватает потоков для обработки.

Параметр size управляет количеством потоков.

Параметр queue_size позволяет управлять размером очереди ожидающих запросов, которым не хватает потоков для выполнения. По умолчанию он устанавливается в -1, что означает неограниченный размер. Когда приходит запрос, а очередь полна, запрос будет прерван.

thread_pool:
    write:
        size: 30
        queue_size: 1000

scaling

Пул потоков scaling содержит динамическое число потоков. Это число пропорционально объёму работы и варьируется между значениями параметров core и max.

Параметр keep_alive определяет, как долго поток должен храниться в пуле потоков без выполнения работы.

thread_pool:
    warmer:
        core: 1
        max: 8
        keep_alive: 2m

Настройка выделенных процессоров

Количество процессоров автоматически определяется, а настройки пула потоков автоматически устанавливаются на его основе. В некоторых случаях может быть полезно переопределить количество обнаруженных процессоров. Это можно сделать, явно задав настройку node.processors. Эта настройка ограничена количеством доступных процессоров и принимает значения с плавающей запятой, что может быть полезно в средах, где узлы Elasticsearch настроены на работу с ограничениями ЦП, такими как доли ЦП или квоты в Cgroups.

node.processors: 2

Существуют несколько случаев использования для явного переопределения настройки node.processors:

  1. Если вы запускаете несколько экземпляров Elasticsearch на одном хосте, но хотите, чтобы Elasticsearch настраивал свои пулы потоков так, как будто у него только часть ЦП, вы должны переопределить настройку node.processors на желаемую долю, например, если вы запускаете два экземпляра Elasticsearch на машине с 16 ядрами, установите node.processors в 8. Обратите внимание, что это случай для экспертов, и здесь много больше нюансов, чем просто установка настройки node.processors, поскольку есть другие соображения, такие как изменение количества потоков сборки мусора, привязка процессов к ядрам и так далее.
  2. Иногда количество процессоров неправильно определяется, и в таких случаях явное задание настройки node.processors позволит обойти эти проблемы.

Для проверки количества обнаруженных процессоров используйте API информации о узлах с флагом os.

© 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/8.17/modules-threadpool.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API