首页/数据/NoSQL 速查/_tasks 查看与取消长任务
Elasticsearch89 条

_tasks 查看与取消长任务

任务接口列出正在执行的集群任务(搜索、reindex、force merge 等)及耗时;需要中断时用任务 ID 取消,是排查长任务与资源占用的关键入口。

NoSQL 速查数据更新于 2026-10-13

任务接口是干什么的

任务接口列出集群里正在执行的任务(搜索、reindex、force merge、创建索引等)及其耗时,需要中断时用任务 ID 取消。它是排查"集群在忙什么、谁在占线程池"最直接的入口,也是判断某个长任务该继续等还是该干预的依据。

基本信息

列出任务GET /_tasks?detailed=true&actions=*_search
单任务详情GET /_tasks/<task_id>
取消POST /_tasks/<task_id>/_cancel
常用过滤actions=*reindex、nodes=<node_id>、group_by=parents
任务 ID 形态nodeId:taskId 组合

示例

示例
# 只看 reindex 类长任务
GET /_tasks?detailed=true&actions=*reindex

# 按父任务分组,看清是谁派生的子任务
GET /_tasks?group_by=parents&human=true

# 单任务详情:包含描述与耗时
GET /_tasks/oTUltX4IQMOUUVeiohTt74:42

# 取消任务
POST /_tasks/oTUltX4IQMOUUVeiohTt74:42/_cancel

典型使用场景

  • 集群变慢时先确认有没有长任务在占线程池
  • 查看 reindex 或 force merge 的进度与剩余量
  • 取消误提交的批量任务(例如全量重建索引)
  • 定位某个客户端发出的搜索风暴
  • 变更窗口前确认没有正在进行的集群级任务

任务字段读法

字段含义关注点
action任务类型与来源search 类与 reindex 类的判断依据
running_time_in_nanos已运行时长远超日常水平时要介入
cancellable是否支持取消false 的任务发取消请求不生效
description任务文本描述reindex 会带源索引、目标索引与条件
parent_task_id父任务标识批量场景子任务多,按父任务分组看
取消是协作式的:任务在检查点响应取消请求,搜索类任务通常较快停止,写入类任务会先完成当前批次,因此取消后短时间内资源不会立即释放。
不带 detailed 的列表响应看不到描述与进度,排查长任务时统一加上 detailed=true 与 human=true,可读性会好很多。

任务为什么会堆积

每个正在执行的请求都会注册成任务,正常情况下任务生灭很快,列表里只看到零星几条。当并发超过线程池处理能力时任务开始排队,running_time 随之增长;协调节点上的批量操作还会派生出大量子任务,让列表看着很长。所以判断集群是否健康,看的不是任务条数本身,而是长耗时任务的类型、数量与来源客户端。

任务列表是瞬时快照,短任务可能在两次采样之间就结束了;要统计某类任务的耗时分布,应结合慢日志或连续采样,而不是只看一次输出。

易错点

  • 任务 ID 是 nodeId:taskId 组合,节点重启后旧 ID 失效,脚本里不能长期缓存 ID
  • 取消不代表资源立即释放,任务可能完成当前批次后才退出,取消后仍要观察一段时间
  • 只按 action 过滤会把系统内部任务也列出来,排查业务查询时结合 description 判断来源
  • 把 group_by=parents 的输出当成扁平列表解析,会漏掉子任务导致统计口径偏小

数据来源与参考

  • Elasticsearch Guide: Task management API
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌