OpenSearch использует пулы потоков для управления обработкой запросов и оптимизации использования ресурсов на каждом узле кластера.
Для чего он используется
Основные пулы потоков используются для поиска, получения и записи, но есть и ряд других, которые можно увидеть, выполнив команду:
1 | GET /_cat/thread_pool/?v&h=id,name,active,rejected,completed,size,type&pretty |
Выполнив приведенную выше команду, можно увидеть, что каждый узел имеет несколько различных пулов потоков, каковы размер и тип пула потоков, а также увидеть, на каких узлах были отклонены операции. OpenSearch автоматически настраивает параметры управления пулом потоков в зависимости от количества процессоров, обнаруженных на каждом узле.
Типы пулов потоков
Fixed - фиксированное число потоков с фиксированным размером очереди
1 2 3 | write: size: 30 queue_size: 1000 |
Масштабирование - переменное количество потоков, которое OpenSearch масштабирует автоматически в зависимости от рабочей нагрузки.
1 2 3 4 | thread_pool: warmer: core: 1 max: 8 |
fixed_autoqueue_size - фиксированное число потоков с переменным размером очереди, который динамически изменяется для поддержания заданного времени отклика
1 2 3 4 5 6 7 8 | 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 |
Примеры
Чтобы узнать, какие потоки используют больше всего процессора или занимают больше всего времени, можно использовать следующий запрос. Это может помочь найти операции, которые приводят к снижению производительности кластера.
1 | GET /_nodes/hot_threads |
Примечания и полезные советы
В общем случае не рекомендуется изменять настройки пула потоков. Однако стоит отметить, что потоковые пулы устанавливаются в зависимости от количества процессоров, которое OpenSearch обнаружил на базовом оборудовании. Если это определение не удалось, то в OpenSearch.yml следует явно задать количество процессоров, доступных на вашем оборудовании, следующим образом:
1 | processors: 4 |
Большинство потоковых пулов также имеют связанные с ними очереди, позволяющие OpenSearch хранить запросы в памяти в ожидании появления ресурсов для обработки запроса. Однако очереди обычно имеют конечный размер, и если этот размер будет превышен, то OpenSearch отклонит запрос.
Иногда возникает соблазн увеличить размер очереди, чтобы предотвратить отклонение запросов, но это лишь устранит симптом, а не основную причину проблемы. Более того, это может быть даже контрпродуктивно, так как при увеличении размера очереди узлу придется использовать больше памяти для хранения очереди, и у него останется меньше места для обработки запросов. Кроме того, увеличение размера очереди приведет к увеличению времени нахождения операций в очереди, в результате чего клиентские приложения столкнутся с проблемой тайм-аута.
Обычно увеличение размера очереди оправдано только в тех случаях, когда запросы поступают неравномерными потоками, и вы не можете управлять этим процессом на стороне клиента.
Чтобы лучше понять производительность кластера OpenSearch, можно отслеживать пулы потоков. Панель мониторинга OpenSearch в Kibana показывает графики очередей потоков поиска, получения и записи, а также отклонения очередей. Растущие очереди указывают на то, что OpenSearch с трудом справляется с запросами, а отклонения - на то, что очереди выросли настолько, что OpenSearch отклоняет обращения к серверу.
Проверьте причины увеличения очередей. Попытайтесь сбалансировать активность на узлах кластера и сбалансировать требования к пулу потоков кластера, предприняв действия на стороне клиента.