📣 极限科技诚招搜索运维工程师(Elasticsearch/Easysearch)- 全职/北京 👉 : 立即申请加入

此 API 用于显示集群中所有节点的线程池统计信息。

API #

GET /_cat/thread_pool
GET /_cat/thread_pool/{thread_pool_patterns}

API 的作用 #

返回集群中所有节点的线程池详细统计信息,包括:

  • 活跃线程数:当前正在执行的线程数量
  • 线程池大小:线程池的配置大小
  • 队列状态:队列中的任务数和队列容量
  • 拒绝统计:被拒绝的任务数量
  • 完成统计:已完成的任务总数

此 API 是监控和调试集群性能的重要工具,可以帮助识别线程池瓶颈和资源竞争问题。

API 的参数 #

路由参数 #

参数类型是否必需描述
thread_pool_patternsstring可选线程池名称模式
支持通配符
例如:search, index*, bulk,index
默认:* 匹配所有线程池

查询字符串参数 #

参数类型是否必需默认值描述
bytesstring可选b字节显示格式
可选值:b, k, kb, m, mb, g, gb
formatstring可选text响应格式
可选值:json, yaml, text
hstring可选默认列指定显示的列,逗号分隔
helpboolean可选false显示帮助信息
localboolean可选false是否从本地节点获取信息
master_timeouttime可选30s等待主节点响应的超时时间
sstring可选-排序列
支持 :asc:desc
thread_pool_patternsstring可选*指定线程池名称模式(查询字符串形式)
timestring可选ms时间单位
可选值:nanos, micros, ms, s, m, h, d
vboolean可选false详细模式,显示列头

返回的字段信息 #

列名别名描述
node_namenn节点名称
node_idid节点持久 ID
ephemeral_node_ideid节点临时 ID
pidp进程 ID
hosth主机名
ipiIP 地址
portpo传输端口
namen线程池名称
typet线程池类型
activea活跃线程数
pool_sizepsz线程池大小
queueq队列中的任务数
queue_sizeqs队列最大容量
rejectedr被拒绝的任务数
largestl历史最大活跃线程数
completedc已完成的任务数
corecr扩展线程池的核心线程数
maxmx扩展线程池的最大线程数
sizesz固定线程池的线程数
keep_aliveka线程保持存活时间

默认显示的列:node_name, name, active, queue, rejected

线程池类型 #

类型描述
FIXED固定大小线程池
SCALING可扩展线程池,可根据负载动态调整线程数量
AUTO_QUEUE_ADJUSTING自动队列调整线程池
FIXED_AUTO_QUEUE_ADJUSTING固定大小自动队列调整线程池

常见线程池 #

线程池用途
search处理搜索请求
write处理索引写入操作
get处理 GET 请求
bulk处理批量操作
management处理集群管理操作
listener处理网络监听器
flush处理刷新操作
refresh处理段刷新
warmer处理段预热

请求示例 #

# 查询所有线程池
GET /_cat/thread_pool

# 显示列头
GET /_cat/thread_pool?v

# 查询特定线程池
GET /_cat/thread_pool/search

# 查询多个线程池(逗号分隔)
GET /_cat/thread_pool/search,bulk

# 使用通配符查询
GET /_cat/thread_pool/*

# 使用 JSON 格式
GET /_cat/thread_pool?format=json

# 只显示特定列
GET /_cat/thread_pool?h=node_name,name,active,queue,rejected

# 按活跃线程数排序
GET /_cat/thread_pool?s=active:desc

# 显示帮助信息
GET /_cat/thread_pool?help

响应示例 #

文本格式(默认) #

node_name     name        active queue rejected
master-node   search          5     2        0
master-node   write           3     0       10
data-node-1   search          8     5        0
data-node-1   bulk            2    50       15
data-node-2   search          4     1        0
data-node-2   write           2     0        5

JSON 格式 #

[
  {
    "node_name": "master-node",
    "name": "search",
    "active": "5",
    "queue": "2",
    "rejected": "0"
  },
  {
    "node_name": "data-node-1",
    "name": "bulk",
    "active": "2",
    "queue": "50",
    "rejected": "15"
  }
]

详细模式(带完整列头) #

node_name   name   active pool_size queue queue_size rejected largest completed
master-node search 5      4         2     100         0        5      15234
master-node write  3      2         0     200         10       3      8567

使用场景 #

  1. 性能监控:监控线程池的使用情况
  2. 瓶颈识别:识别线程池饱和问题
  3. 拒绝分析:分析任务被拒绝的原因
  4. 容量规划:评估线程池配置是否合理
  5. 问题排查:诊断请求处理延迟问题

线程池问题诊断 #

高拒绝率 #

如果 rejected 列显示大量拒绝:

  • 线程池过小,需要增加线程数
  • 队列已满,考虑增加队列大小
  • 负载过高,考虑增加节点或优化查询

队列堆积 #

如果 queue 列持续高位:

  • 处理速度跟不上请求速度
  • 可能存在慢查询或大量写入
  • 检查 active 线程是否达到池大小上限

活跃线程持续高位 #

如果 active 持续接近 pool_size

  • 线程池可能成为瓶颈
  • 考虑增加线程池大小或增加节点

线程池配置 #

线程池可以通过配置文件进行调整:

thread_pool:
  search:
    size: 20
    queue_size: 100
  write:
    size: 10
    queue_size: 200

注意事项 #

  1. 此 API 只支持 GET 方法
  2. 默认只显示部分列,使用 v=true 显示完整列头
  3. local=true 时可能返回过时信息,但响应更快
  4. 线程池配置更改需要重启节点才能生效
  5. 不同版本的 Easysearch 可能有不同的线程池类型和名称

最佳实践 #

  1. 定期监控:定期检查线程池状态,关注拒绝率
  2. 设置告警:对高拒绝率和队列堆积设置告警
  3. 合理配置:根据实际负载调整线程池大小
  4. 分析模式:分析负载模式,找出高峰时段
  5. 文档记录:记录线程池配置变更,便于问题追踪

相关文档 #