任务队列积压编辑

积压的任务队列可能会阻止任务完成,并将集群置于不健康状态。资源限制、一次触发大量任务以及长时间运行的任务都可能导致任务队列积压。

诊断任务队列积压编辑

检查线程池状态

线程池耗尽会导致请求被拒绝

您可以使用cat 线程池 API查看每个线程池中活动线程的数量,以及有多少任务已排队、有多少任务已被拒绝以及有多少任务已完成。

response = client.cat.thread_pool(
  v: true,
  s: 't,n',
  h: 'type,name,node_name,active,queue,rejected,completed'
)
puts response
GET /_cat/thread_pool?v&s=t,n&h=type,name,node_name,active,queue,rejected,completed

检查每个节点上的热点线程

如果某个线程池队列积压,您可以定期轮询节点热点线程 API,以确定该线程是否有足够的资源来继续运行,并评估其运行速度。

response = client.nodes.hot_threads
puts response
GET /_nodes/hot_threads

查找长时间运行的任务

长时间运行的任务也可能导致积压。您可以使用任务管理 API 获取有关正在运行的任务的信息。检查running_time_in_nanos以识别完成时间过长的任务。

response = client.tasks.list(
  filter_path: 'nodes.*.tasks'
)
puts response
GET /_tasks?filter_path=nodes.*.tasks

解决任务队列积压编辑

增加可用资源

如果任务进展缓慢且队列积压,您可能需要采取措施降低 CPU 使用率

在某些情况下,增加线程池大小可能会有所帮助。例如,force_merge线程池默认为单个线程。将大小增加到 2 可能有助于减少强制合并请求的积压。

取消卡住的任务

如果您发现活动任务的热点线程没有进展并且存在积压,请考虑取消该任务。