Пулы потоков
Узел использует несколько пулов потоков для управления потреблением памяти. Очереди, связанные со многими пулами потоков, позволяют удерживать ожидающие запросы вместо их отбрасывания.
Существует несколько пулов потоков, но важными являются следующие:
-
generic - Для общих операций (например, обнаружения узлов в фоновом режиме). Тип пула потоков —
scaling.
-
search - Для операций count/search/suggest. Тип пула потоков —
fixed_auto_queue_sizeс размеромint((# of allocated processors* 3) / 2) + 1и начальным размером очереди1000. -
search_throttled - Для операций count/search/suggest/get по
search_throttled indices. Тип пула потоков —fixed_auto_queue_sizeс размером1и начальным размером очереди100. -
search_coordination - Для лёгких координационных операций, связанных с поиском. Тип пула потоков —
fixedс размером максимумmin(5, (# of allocated processors) / 2)и размером очереди1000. -
get - Для операций get. Тип пула потоков —
fixedс размером# of allocated processors, размером очереди1000. -
analyze - Для запросов analyze. Тип пула потоков —
fixedс размером1, размером очереди16. -
write - Для запросов index/delete/update одного документа и bulk запросов. Тип пула потоков —
fixedс размером# of allocated processors, размером очереди10000. Максимальный размер для данного пула —1 +# of allocated processors. -
snapshot - Для операций snapshot/restore. Тип пула потоков —
scalingс keep-alive5mи максимумmin(5, (# of allocated processors) / 2). -
snapshot_meta - Для чтения метаданных репозитория snapshot. Тип пула потоков —
scalingс keep-alive5mи максимумmin(50, (# of allocated processors* 3)). -
warmer - Для операций прогрева сегментов. Тип пула потоков —
scalingс keep-alive5mи максимумmin(5, (# of allocated processors) / 2). -
refresh - Для операций refresh. Тип пула потоков —
scalingс keep-alive5mи максимумmin(10, (# of allocated processors) / 2). -
listener - В основном для выполнения действий java-клиента, когда потоку слушателя задан режим
true. Тип пула потоков —scalingс максимальным значением по умолчаниюmin(10, (# of allocated processors) / 2). -
fetch_shard_started - Для перечисления состояний фрагментов. Тип пула потоков —
scalingс keep-alive5mи максимальным размером по умолчанию2 *# of allocated processors. -
fetch_shard_store - Для перечисления хранилищ фрагментов. Тип пула потоков —
scalingс keep-alive5mи максимальным размером по умолчанию2 *# of allocated processors. -
flush - Для операций flush, synced flush и translog
fsync. Тип пула потоков —scalingс keep-alive5mи максимальным размером по умолчаниюmin(5, (# of allocated processors) / 2). -
force_merge - Для операций force merge. Тип пула потоков —
fixedс размером 1 и неограниченным размером очереди. -
management - Для управления кластером. Тип пула потоков —
scalingс keep-alive5mи максимальным размером по умолчанию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 - Для выполнения задач watch. Тип пула потоков —
fixedс максимальным размером по умолчаниюmin(5 * (# of allocated processors), 50)и размером очереди1000.
Параметры пулов потоков являются статическими и могут быть изменены путём редактирования elasticsearch.yml. Изменение конкретного пула потоков может быть выполнено путём настройки его параметров; например, изменение числа потоков в пуле write потоков:
thread_pool:
write:
size: 30 Типы пулов потоков
Ниже приведены типы пулов потоков и их соответствующие параметры:
fixed
Пул потоков fixed поддерживает фиксированное количество потоков для обработки запросов с очередью (возможно, ограниченной) для ожидающих запросов, для которых нет потоков для обработки.
Параметр size управляет количеством потоков.
Параметр queue_size позволяет контролировать размер очереди ожидающих запросов, для которых нет потоков для их выполнения. По умолчанию он равен -1, что означает неограниченную очередь. Если запрос поступает, а очередь заполнена, запрос будет прерван.
thread_pool:
write:
size: 30
queue_size: 1000 fixed_auto_queue_size
Эта функция находится в стадии технического предварительного просмотра и может быть изменена или удалена в будущих релизах. Elastic будет работать над устранением любых проблем, но функции в стадии технического предварительного просмотра не подпадают под SLA поддержки официальных функций GA.
Устарело в 7.7.0.
Тип экспериментального пула потоков fixed_auto_queue_size устарел и будет удален в версии 8.0.
Пул потоков fixed_auto_queue_size поддерживает фиксированное количество потоков для обработки запросов с ограниченной очередью для ожидающих запросов, для которых нет потоков для обработки. Он похож на пул потоков fixed, однако размер очереди queue_size автоматически регулируется в соответствии с расчетами, основанными на законе Литтла. Эти расчеты могут изменять размер очереди queue_size вверх или вниз на 50 каждый раз после завершения auto_queue_frame_size операций.
Параметр size управляет количеством потоков.
Параметр queue_size позволяет контролировать начальный размер очереди ожидающих запросов, для которых нет потоков для их выполнения.
Настройка min_queue_size контролирует минимальный размер, до которого может быть отрегулирован размер очереди queue_size.
Настройка max_queue_size контролирует максимальный размер, до которого может быть отрегулирован размер очереди queue_size.
Настройка auto_queue_frame_size контролирует количество операций, в течение которых производится измерение, прежде чем происходит регулировка очереди. Она должна быть достаточно большой, чтобы отдельная операция не повлияла на расчеты.
Настройка target_response_time — это временное значение, которое указывает целевое среднее время отклика задач в очереди пула потоков. Если задачи регулярно превышают это время, размер очереди пула потоков будет уменьшен, чтобы отказать в выполнении задач.
thread_pool:
search:
size: 30
queue_size: 500
min_queue_size: 10
max_queue_size: 1000
auto_queue_frame_size: 2000
target_response_time: 1s scaling
Пул потоков scaling поддерживает динамическое количество потоков. Это количество пропорционально объему работы и варьируется между значениями параметров core и max.
Параметр keep_alive определяет, как долго поток должен сохраняться в пуле потоков без выполнения работы.
thread_pool:
warmer:
core: 1
max: 8
keep_alive: 2m Настройка назначенных процессоров
Количество процессоров автоматически обнаруживается, а параметры пула потоков автоматически настраиваются на основе этого значения. В некоторых случаях может быть полезно переопределить количество обнаруженных процессоров. Это можно сделать, явно задав настройку node.processors.
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/7.17/modules-threadpool.html