线程池看什么
Elasticsearch 按操作类型把请求放进不同线程池:search、write、get、management、snapshot 等,每个池有固定数量的线程和一个容量有限的队列。队列排满后新请求会被直接拒绝,这个拒绝计数就是判断节点是否过载最直接的信号。
基本信息
| 接口 | GET /_cat/thread_pool?v |
|---|---|
| 关键列 | node_name、name、active、queue、rejected、completed |
| 常见池 | search、search_throttled、write、get、management、snapshot |
| 拒绝含义 | 队列已满且无线程可用,请求被拒并返回 429 |
| 深挖方式 | 用 _nodes/stats/thread_pool 查看各节点明细 |
典型使用场景
- 排查接口报 429:确认是哪个线程池在拒绝请求
- 评估集群是否过载:观察 search 与 write 池的队列长度
- 定位单节点异常:某个节点的拒绝数远高于其他节点
- 容量规划:为扩容提供并发压力的量化依据
- 验证限流效果:调整客户端并发后看拒绝数是否回落
常用写法
常用写法
# 按拒绝数排序,先看最严重的节点与线程池
GET /_cat/thread_pool?v&h=node_name,name,active,queue,rejected&s=rejected:desc
# 只看 search 与 write 两个关键池
GET /_cat/thread_pool/search,write?v
# 集群级统计:取各节点的拒绝计数
GET /_nodes/stats/thread_pool?filter_path=nodes.*.thread_pool.*.rejected
# 队列长度持续非零说明请求在排队
GET /_cat/thread_pool?v&h=node_name,name,active,queue,completed&s=queue:desc关键列读法
| 列 | 含义 | 正常 / 异常 |
|---|---|---|
| active | 正在执行任务的线程数 | 长期打满说明并发超过处理能力 |
| queue | 排队等待的任务数 | 持续非零说明处理速度跟不上 |
| rejected | 累计被拒绝的任务数 | 增长快意味着已经过载 |
| completed | 累计完成的任务数 | 用于换算拒绝比例 |
| name | 线程池名称 | search 与 write 最需要关注 |
rejected 是累计计数,趋势比绝对值重要:看单位时间的增长速率,持续增长意味着并发已超过节点处理能力,需要扩容或限制客户端并发。
单次超大聚合或多字段深排序同样可能压满 search 池并触发拒绝,遇到 429 时把线程池数据与慢日志一起看,比单纯扩大队列更能找到根因。