任务队列积压
编辑任务队列积压编辑
积压的任务队列可能会阻止任务完成,并将集群置于不健康状态。资源限制、一次触发大量任务以及长时间运行的任务都可能导致任务队列积压。
诊断任务队列积压编辑
检查线程池状态
您可以使用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 可能有助于减少强制合并请求的积压。
取消卡住的任务
如果您发现活动任务的热点线程没有进展并且存在积压,请考虑取消该任务。