--- title: "GET 请求线程池配置" date: 2026-01-14 lastmod: 2026-01-14 description: "控制 GET 请求线程池的配置项说明" tags: ["线程池配置", "性能调优", "请求处理"] summary: "配置项作用 # thread_pool.get 相关配置项控制用于处理 GET 请求的线程池。GET 请求包括单文档查询(如 GET 操作)等获取数据的操作。该线程池采用固定大小线程池类型,线程数默认为处理器核心数。 配置项类型 # 该配置项为静态配置,需要在启动时设置,修改后需要重启节点才能生效。 默认值 # thread_pool.get.size: 分配的处理器数(通常为 CPU 核心数) thread_pool.get.queue_size: 1000 是否必需 # 可选配置项(有默认值) 配置格式 # # 默认配置(使用 CPU 核心数) thread_pool.get.size: ${processors:} thread_pool.get.queue_size: 1000 # 显式设置线程数 thread_pool.get.size: 16 thread_pool.get.queue_size: 1000 # 增加队列大小 thread_pool.get.size: 16 thread_pool.get.queue_size: 2000 # 减少线程数 thread_pool.get.size: 8 thread_pool.get.queue_size: 1000 相关配置项 # 配置项 默认值 说明 thread_pool.get.size ${processors:} 线程池大小 thread_pool." --- ## 配置项作用 `thread_pool.get` 相关配置项控制用于处理 GET 请求的线程池。GET 请求包括单文档查询(如 GET 操作)等获取数据的操作。该线程池采用固定大小线程池类型,线程数默认为处理器核心数。 ## 配置项类型 该配置项为**静态配置**,需要在启动时设置,修改后需要重启节点才能生效。 ## 默认值 ``` thread_pool.get.size: 分配的处理器数(通常为 CPU 核心数) thread_pool.get.queue_size: 1000 ``` ## 是否必需 **可选配置项**(有默认值) ## 配置格式 ```yaml # 默认配置(使用 CPU 核心数) thread_pool.get.size: ${processors:} thread_pool.get.queue_size: 1000 # 显式设置线程数 thread_pool.get.size: 16 thread_pool.get.queue_size: 1000 # 增加队列大小 thread_pool.get.size: 16 thread_pool.get.queue_size: 2000 # 减少线程数 thread_pool.get.size: 8 thread_pool.get.queue_size: 1000 ``` ## 相关配置项 | 配置项 | 默认值 | 说明 | |-------|-------|------| | `thread_pool.get.size` | ${processors:} | 线程池大小 | | `thread_pool.get.queue_size` | 1000 | 队列大小 | ## 线程池类型 ``` 类型: FIXED (固定线程池) 特点: - 固定数量的线程 - 有界队列 - 线程数默认为 CPU 核心数 - 适用于文档 GET 操作 ``` ## 工作原理 GET 请求处理流程: ``` ┌─────────────────────────────────────────────────────────────────┐ │ GET 请求处理 │ └─────────────────────────────────────────────────────────────────┘ GET 请求到达(单文档查询) │ ▼ 检查线程池状态 │ ├── 有空闲线程 │ │ │ └── 立即处理请求 │ ├── 线程繁忙,队列未满 │ │ │ └── 加入队列等待 │ └── 队列已满 │ └── 拒绝请求 ``` ## 使用场景 ### 1. 默认配置(推荐) ```yaml thread_pool.get.size: ${processors:} thread_pool.get.queue_size: 1000 ``` 适用于大多数集群配置。 ### 2. 高并发 GET 场景 ```yaml thread_pool.get.size: 32 thread_pool.get.queue_size: 2000 ``` **适用场景:** - 大量单文档查询 - 高并发读取需求 - 高性能节点 ### 3. 资源受限 ```yaml thread_pool.get.size: 8 thread_pool.get.queue_size: 500 ``` **适用场景:** - CPU 资源有限 - GET 请求较少 - 保护系统资源 ### 4. I/O 密集型工作负载 ```yaml # 可以设置大于 CPU 核心数的线程 thread_pool.get.size: ${processors:2} thread_pool.get.queue_size: 2000 ``` ## 推荐设置建议 | CPU 核心数 | 推荐线程数 | 推荐队列大小 | 说明 | |-----------|-----------|-------------|------| | 4-8 | 4-8 | 1000 | 小型节点 | | 8-16 | 8-16 | 1000-2000 | 中型节点 | | 16-32 | 16-24 | 2000-4000 | 大型节点 | | 32+ | 32-48 | 4000+ | 高性能节点 | ## 监控建议 ```bash # 查看线程池状态 GET /_cat/thread_pool/get?v # 查看详细统计 GET /_nodes/stats/thread_pool/get # 查看活跃线程 GET /_cat/nodes?v&h=name,cpu ``` ## 性能影响 ### 线程数过小(4) ``` 优点: ✓ 节省 CPU 资源 ✓ 减少线程切换开销 缺点: ✗ GET 请求排队 ✗ 响应延迟增加 ✗ 吞吐量受限 ``` ### 线程数过大(64) ``` 优点: ✓ 高并发处理能力 ✓ 高吞吐量 缺点: ✗ 大量上下文切换 ✗ 可能影响其他操作 ✗ 内存消耗增加 ``` ## 与搜索线程池的区别 | 特性 | thread_pool.get | thread_pool.search | |-----|-----------------|-------------------| | 用途 | 单文档 GET 请求 | 复杂搜索查询 | | 默认线程数 | processors | processors | | 默认队列大小 | 1000 | 1000 | | 队列类型 | 固定队列 | 自适应队列 | ## 队列大小影响 ``` 小队列(500): - 快速失败 - 低延迟 - 可能拒绝有效请求 大队列(2000): - 缓冲更多请求 - 吞吐量更高 - 可能增加延迟 ``` ## 故障排查 ### GET 请求被拒绝 ```bash # 检查线程池状态 GET /_cat/thread_pool/get?v # 查看 rejected 计数 # 如果 rejected 持续增加,说明线程池过载 ``` ### 响应延迟高 1. 检查队列积压情况 2. 增加线程数 3. 检查磁盘 I/O 4. 检查缓存命中率 ### CPU 使用率高 1. 减少线程数 2. 优化查询 3. 增加缓存 4. 考虑使用搜索线程池 ## 注意事项 1. **静态配置**:修改需要重启节点 2. **默认基于 CPU 核心数**:size 默认为 processors 3. **队列满会拒绝请求**:合理设置队列大小 4. **与 search 线程池区分**:get 仅用于单文档查询 5. **I/O 密集型操作**:可以设置大于 CPU 核心数 6. **影响查询性能**:直接影响 GET 请求的响应时间