Spec-Zone.ru › Elasticsearch 8
›Elasticsearch Guide [8.17] ›Устранение неполадок ›Устранение распространенных проблем кластера

Задержка очереди задач

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

Диагностика задержки очереди задач

Проверка состояния пула потоков

Истощение пула потоков может привести к отклонению запросов.

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

Используйте API cat thread pool, чтобы увидеть количество активных потоков в каждом пуле потоков и количество задач в очереди, количество отклоненных задач и количество завершенных задач.

resp = client.cat.thread_pool(
    v=True,
    s="t,n",
    h="type,name,node_name,active,queue,rejected,completed",
)
print(resp)
response = client.cat.thread_pool(
  v: true,
  s: 't,n',
  h: 'type,name,node_name,active,queue,rejected,completed'
)
puts response
const response = await client.cat.threadPool({
  v: "true",
  s: "t,n",
  h: "type,name,node_name,active,queue,rejected,completed",
});
console.log(response);
GET /_cat/thread_pool?v&s=t,n&h=type,name,node_name,active,queue,rejected,completed

Статистики active и queue являются мгновенными, в то время как статистики rejected и completed являются кумулятивными с момента запуска узла.

Просмотр активных потоков на каждом узле

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

resp = client.nodes.hot_threads()
print(resp)
response = client.nodes.hot_threads
puts response
const response = await client.nodes.hotThreads();
console.log(response);
GET /_nodes/hot_threads

Поиск длительно выполняемых задач узла

Длительно выполняемые задачи также могут вызывать задержки. Используйте API управления задачами, чтобы получить информацию о выполняемых на узле задачах. Проверьте running_time_in_nanos, чтобы определить задачи, которые занимают чрезмерно много времени для завершения.

resp = client.tasks.list(
    pretty=True,
    human=True,
    detailed=True,
)
print(resp)
const response = await client.tasks.list({
  pretty: "true",
  human: "true",
  detailed: "true",
});
console.log(response);
GET /_tasks?pretty=true&human=true&detailed=true

Если подозревается конкретная action, можно дополнительно отфильтровать задачи. Наиболее распространёнными длительно выполняемыми задачами являются задачи, связанные с оптовой индексацией или поиском.

  • Фильтрация действий оптовой индексации:

    resp = client.tasks.list(
        human=True,
        detailed=True,
        actions="indices:data/write/bulk",
    )
    print(resp)
    const response = await client.tasks.list({
      human: "true",
      detailed: "true",
      actions: "indices:data/write/bulk",
    });
    console.log(response);
    GET /_tasks?human&detailed&actions=indices:data/write/bulk
  • Фильтрация действий поиска:

    resp = client.tasks.list(
        human=True,
        detailed=True,
        actions="indices:data/write/search",
    )
    print(resp)
    const response = await client.tasks.list({
      human: "true",
      detailed: "true",
      actions: "indices:data/write/search",
    });
    console.log(response);
    GET /_tasks?human&detailed&actions=indices:data/write/search

Ответ API может содержать дополнительные столбцы задач, включая description и header, которые предоставляют параметры задачи, цель и запрос. Эту информацию можно использовать для дальнейшей диагностики.

Поиск длительно выполняемых задач кластера

Задержка очереди задач также может проявляться как задержка при синхронизации состояния кластера. Используйте API задач кластера, ожидающих выполнения, чтобы получить информацию о выполняемых задачах синхронизации состояния кластера.

resp = client.cluster.pending_tasks()
print(resp)
const response = await client.cluster.pendingTasks();
console.log(response);
GET /_cluster/pending_tasks

Проверьте timeInQueue, чтобы определить задачи, которые занимают чрезмерно много времени для завершения.

Решение проблемы с задержкой очереди задач

Увеличение доступных ресурсов

Если задачи выполняются медленно, и очередь заполняется, возможно, необходимо принять меры по снижению использования ЦП.

В некоторых случаях увеличение размера пула потоков может помочь. Например, пул потоков force_merge по умолчанию имеет один поток. Увеличение размера до 2 может помочь уменьшить задержку запросов на слияние.

Отмена зависших задач

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

© 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/task-queue-backlog.html

Spec-Zone.ru

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