--- title: "查询线程池" date: 2026-01-29 lastmod: 2026-01-29 description: "介绍如何使用 Cat API 查询 Easysearch 集群中各节点的线程池统计信息。" tags: ["Cat API", "线程池", "监控", "性能"] summary: "此 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 字节显示格式" --- 此 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` | 处理段预热 | ## 请求示例 ```bash # 查询所有线程池 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 格式 ```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`: - 线程池可能成为瓶颈 - 考虑增加线程池大小或增加节点 ## 线程池配置 线程池可以通过配置文件进行调整: ```yaml 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. **文档记录**:记录线程池配置变更,便于问题追踪 ## 相关文档 - [查询节点](./get-node.md) - [获取节点统计信息](./get-node-stats.md) - [查询集群健康Cat格式](./get-cluster-health-cat-format.md)