Пулы потоков
Узел использует несколько пулов потоков для управления потреблением памяти. Очереди, связанные со многими пулами потоков, позволяют удерживать ожидающие запросы вместо их отбрасывания.
Существует несколько пулов потоков, но важными являются:
-
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:
- Если вы запускаете несколько экземпляров Elasticsearch на одном хосте, но хотите, чтобы Elasticsearch настраивал свои пулы потоков так, как будто у него только часть ЦП, вы должны переопределить настройку
node.processorsна желаемую долю, например, если вы запускаете два экземпляра Elasticsearch на машине с 16 ядрами, установитеnode.processorsв 8. Обратите внимание, что это случай для экспертов, и здесь много больше нюансов, чем просто установка настройкиnode.processors, поскольку есть другие соображения, такие как изменение количества потоков сборки мусора, привязка процессов к ядрам и так далее. - Иногда количество процессоров неправильно определяется, и в таких случаях явное задание настройки
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