此 API 用于显示集群中所有节点的线程池统计信息。
API #
GET /_cat/thread_pool
GET /_cat/thread_pool/{thread_pool_patterns}
API 的作用 #
返回集群中所有节点的线程池详细统计信息,包括:
- 活跃线程数:当前正在执行的线程数量
- 线程池大小:线程池的配置大小
- 队列状态:队列中的任务数和队列容量
- 拒绝统计:被拒绝的任务数量
- 完成统计:已完成的任务总数
此 API 是监控和调试集群性能的重要工具,可以帮助识别线程池瓶颈和资源竞争问题。
API 的参数 #
路由参数 #
| 参数 | 类型 | 是否必需 | 描述 |
|---|---|---|---|
thread_pool_patterns | string | 可选 | 线程池名称模式 支持通配符 例如: search, index*, bulk,index默认: * 匹配所有线程池 |
查询字符串参数 #
| 参数 | 类型 | 是否必需 | 默认值 | 描述 |
|---|---|---|---|---|
bytes | string | 可选 | b | 字节显示格式 可选值: b, k, kb, m, mb, g, gb |
format | string | 可选 | text | 响应格式 可选值: json, yaml, text |
h | string | 可选 | 默认列 | 指定显示的列,逗号分隔 |
help | boolean | 可选 | false | 显示帮助信息 |
local | boolean | 可选 | false | 是否从本地节点获取信息 |
master_timeout | time | 可选 | 30s | 等待主节点响应的超时时间 |
s | string | 可选 | - | 排序列 支持 :asc 和 :desc |
thread_pool_patterns | string | 可选 | * | 指定线程池名称模式(查询字符串形式) |
time | string | 可选 | ms | 时间单位 可选值: nanos, micros, ms, s, m, h, d |
v | boolean | 可选 | false | 详细模式,显示列头 |
返回的字段信息 #
| 列名 | 别名 | 描述 |
|---|---|---|
node_name | nn | 节点名称 |
node_id | id | 节点持久 ID |
ephemeral_node_id | eid | 节点临时 ID |
pid | p | 进程 ID |
host | h | 主机名 |
ip | i | IP 地址 |
port | po | 传输端口 |
name | n | 线程池名称 |
type | t | 线程池类型 |
active | a | 活跃线程数 |
pool_size | psz | 线程池大小 |
queue | q | 队列中的任务数 |
queue_size | qs | 队列最大容量 |
rejected | r | 被拒绝的任务数 |
largest | l | 历史最大活跃线程数 |
completed | c | 已完成的任务数 |
core | cr | 扩展线程池的核心线程数 |
max | mx | 扩展线程池的最大线程数 |
size | sz | 固定线程池的线程数 |
keep_alive | ka | 线程保持存活时间 |
默认显示的列: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
使用场景 #
- 性能监控:监控线程池的使用情况
- 瓶颈识别:识别线程池饱和问题
- 拒绝分析:分析任务被拒绝的原因
- 容量规划:评估线程池配置是否合理
- 问题排查:诊断请求处理延迟问题
线程池问题诊断 #
高拒绝率 #
如果 rejected 列显示大量拒绝:
- 线程池过小,需要增加线程数
- 队列已满,考虑增加队列大小
- 负载过高,考虑增加节点或优化查询
队列堆积 #
如果 queue 列持续高位:
- 处理速度跟不上请求速度
- 可能存在慢查询或大量写入
- 检查
active线程是否达到池大小上限
活跃线程持续高位 #
如果 active 持续接近 pool_size:
- 线程池可能成为瓶颈
- 考虑增加线程池大小或增加节点
线程池配置 #
线程池可以通过配置文件进行调整:
thread_pool:
search:
size: 20
queue_size: 100
write:
size: 10
queue_size: 200
注意事项 #
- 此 API 只支持 GET 方法
- 默认只显示部分列,使用
v=true显示完整列头 local=true时可能返回过时信息,但响应更快- 线程池配置更改需要重启节点才能生效
- 不同版本的 Easysearch 可能有不同的线程池类型和名称
最佳实践 #
- 定期监控:定期检查线程池状态,关注拒绝率
- 设置告警:对高拒绝率和队列堆积设置告警
- 合理配置:根据实际负载调整线程池大小
- 分析模式:分析负载模式,找出高峰时段
- 文档记录:记录线程池配置变更,便于问题追踪





