配置项概述 #
indexing_pressure.memory.limit 配置控制索引操作可以使用的最大内存量。当内存使用超过限制时,系统会拒绝新的索引请求以防止节点因内存不足而变得不稳定。
| 配置项 | 默认值 | 说明 |
|---|---|---|
indexing_pressure.memory.limit | 10% | 索引操作内存限制 |
配置说明 #
indexing_pressure.memory.limit #
配置项作用:控制索引操作可以使用的最大堆内存比例或绝对大小。
默认值:10%(堆内存的 10%)
配置类型:节点级配置(可动态更新)
取值范围:
- 百分比:如
10%,25%,50% - 绝对大小:如
100mb,1gb,512kb
配置格式:
# 默认配置:使用百分比
indexing_pressure.memory.limit: 10%
# 使用绝对大小
indexing_pressure.memory.limit: 1gb
# 高吞吐场景
indexing_pressure.memory.limit: 25%
# 内存受限环境
indexing_pressure.memory.limit: 5%
内存跟踪机制 #
索引压力系统跟踪三个类别的内存使用:
1. 协调器 + 主分片操作 #
- 限制:
indexing_pressure.memory.limit - 跟踪内容:协调节点和主分片写入的内存使用
- 内存类型:合并跟踪协调和主分片操作的内存
2. 副本操作 #
- 限制:
indexing_pressure.memory.limit × 1.5 - 跟踪内容:副本写入的内存使用
- 原因:副本写入与主分片写入同时进行,需要更高的限制
3. 组合限制 #
┌──────────────────────────────────────────────┐
│ 索引压力内存限制 │
├──────────────────┬───────────────────────────┤
│ 协调+主分片 │ 副本操作 │
│ limit: 10% │ limit: 10% × 1.5 = 15% │
│ │ │
│ 当前使用: 8% │ 当前使用: 12% │
└──────────────────┴───────────────────────────┘
工作原理 #
内存跟踪 #
// 系统持续跟踪索引操作的内存使用
currentCombinedCoordinatingAndPrimaryBytes // 协调+主分片
currentReplicaBytes // 副本操作
反压机制 #
当内存使用超过限制时:
- 正常请求:拒绝并抛出
EsRejectedExecutionException - 强制请求:允许执行(需要设置
forceExecution=true) - 统计跟踪:记录拒绝次数以便监控
查询索引压力统计 #
API 查询 #
# 查询所有节点的索引压力统计
GET _nodes/stats/indexing_pressure
# 查询特定节点
GET _nodes/node-1/stats/indexing_pressure
响应示例 #
{
"nodes": {
"node-1": {
"indexing_pressure": {
"memory": {
"current": {
"combined_coordinating_and_primary_in_bytes": 8388608,
"replica_in_bytes": 12582912
},
"total": {
"combined_coordinating_and_primary_in_bytes": 104857600,
"replica_in_bytes": 157286400
},
"limit_in_bytes": 107374182
},
"rejection": {
"combined_coordinating_and_primary": 0,
"replica": 0
}
}
}
}
}
使用场景 #
1. 高吞吐索引场景 #
# 大量数据写入场景
indexing_pressure.memory.limit: 25%
适用情况:
- 日志采集系统
- 指标数据写入
- 批量数据导入
2. 混合工作负载 #
# 节点同时处理索引和搜索
indexing_pressure.memory.limit: 10%
适用情况:
- 搜索和写入并存的场景
- 需要为搜索操作预留内存
3. 内存受限环境 #
# 小堆内存配置
indexing_pressure.memory.limit: 5%
适用情况:
- 堆内存小于 4GB 的节点
- 容器化部署环境
4. 批量导入优化 #
# 批量导入时临时增加限制
PUT _cluster/settings
{
"transient": {
"indexing_pressure.memory.limit": "30%"
}
}
错误处理 #
内存超限错误 #
当索引操作被拒绝时,返回以下错误:
{
"error": {
"type": "es_rejected_execution_exception",
"reason": "rejected execution of coordinating operation [ coordinating_and_primary_bytes=8589934592, limit=1073741824, replica_bytes=0, replica_limit=1610612736 ], user: false, caller: [indices:data/write/bulk]"
}
}
强制执行 #
对于关键操作,可以使用强制执行:
POST /_bulk?forceExecution=true
{"index": {"_index": "test", "_id": "1"}}
{"field": "value"}
推荐配置 #
默认配置 #
# 适用于大多数场景
indexing_pressure.memory.limit: 10%
高吞吐配置 #
# 日志和指标收集
indexing_pressure.memory.limit: 20%
搜索优先配置 #
# 搜索为主,写入为辅
indexing_pressure.memory.limit: 5%
大堆内存配置 #
# 堆内存 > 32GB
indexing_pressure.memory.limit: 15%
监控建议 #
关键指标 #
- 当前内存使用:
current.combined_coordinating_and_primary_in_bytes - 总内存使用:
total.combined_coordinating_and_primary_in_bytes - 拒绝次数:
rejection.combined_coordinating_and_primary
告警规则 #
# 内存使用超过 80% 时告警
current_usage / limit > 0.8
# 出现拒绝时告警
rejection_count > 0
注意事项 #
- 动态更新:此配置可以动态更新,无需重启
- 副本乘数:副本操作的限制是主限制的 1.5 倍
- 与断路器配合:与
indices.breaker.total等断路器配置配合使用 - 监控重要:持续监控内存使用和拒绝情况
- 渐进调优:根据实际负载逐步调整,避免一次性设置过大





