配置项作用 #
script.cache.max_size 配置项控制已编译脚本缓存的最大数量。脚本编译后会被缓存以便后续快速执行,此配置决定缓存可以容纳的脚本数量。
配置项类型 #
该配置项为动态配置,可以在运行时通过集群设置 API 进行修改。
默认值 #
100
是否必需 #
可选配置项(有默认值)
取值范围 #
0 ~ 正无穷
配置格式 #
# 默认配置
script.cache.max_size: 100
# 增加缓存大小
script.cache.max_size: 200
# 减少缓存大小
script.cache.max_size: 50
# 禁用缓存
script.cache.max_size: 0
相关配置项 #
| 配置项 | 默认值 | 说明 |
|---|---|---|
script.cache.max_size | 100 | 最大缓存数量 |
script.cache.expire | 0ms | 缓存过期时间 |
script.max_compilations_rate | use-context | 编译速率限制 |
工作原理 #
脚本缓存机制:
┌─────────────────────────────────────────────────────────────────┐
│ 脚本缓存 │
└─────────────────────────────────────────────────────────────────┘
脚本执行请求
│
▼
检查编译缓存
│
├── 缓存命中
│ │
│ └── 直接使用编译结果
│
└── 缓存未命中
│
├── 编译脚本
│
├── 检查缓存大小
│ │
│ ├── 缓存未满 → 加入缓存
│ └── 缓存已满 → 驱逐最旧脚本
│
└── 执行编译结果
使用场景 #
1. 默认配置(推荐) #
script.cache.max_size: 100
适用于大多数集群配置。
2. 大量脚本操作 #
script.cache.max_size: 200
适用场景:
- 频繁脚本查询
- 大量不同脚本
- 提高命中率
3. 资源受限 #
script.cache.max_size: 50
适用场景:
- JVM 堆内存有限
- 脚本变化少
- 减少内存占用
4. 禁用缓存 #
script.cache.max_size: 0
适用场景:
- 脚本每次都不同
- 不需要缓存
- 节省内存
推荐设置建议 #
| 脚本使用模式 | 推荐大小 | 说明 |
|---|---|---|
| 少量固定脚本 | 50-100 | 默认配置 |
| 大量不同脚本 | 200-500 | 提高命中率 |
| 脚本频繁变化 | 0-50 | 减少缓存 |
| 内存受限 | 20-50 | 节省资源 |
缓存效果分析 #
缓存大小与命中率的关系:
小缓存(50):
- ✓ 内存占用少
- ✗ 命中率低
- ✗ 频繁重新编译
中缓存(100):
- 平衡内存和性能
- 适中命中率
大缓存(500):
- ✓ 高命中率
- ✗ 内存占用大
- ✓ 支持更多脚本
监控建议 #
# 查看当前配置
GET /_cluster/settings?filter_path=*.script.cache.max_size
# 查看脚本统计
GET /_nodes/stats/script?filter_path=**.cache
# 查看缓存使用情况
GET /_nodes/stats/script?filter_path=**.compilations
动态配置示例 #
# 更新集群配置
PUT /_cluster/settings
{
"transient": {
"script.cache.max_size": 200
}
}
注意事项 #
- 动态更新:此配置为动态配置,可在线修改
- 内存消耗:缓存占用 JVM 堆内存
- 缓存过期:配合 cache.expire 使用
- 命中率监控:监控缓存命中率
- 合理设置:根据脚本数量和变化频率调整





