📣 极限科技诚招搜索运维工程师(Elasticsearch/Easysearch)- 全职/北京 👉 : 立即申请加入

配置项作用 #

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_size100最大缓存数量
script.cache.expire0ms缓存过期时间
script.max_compilations_rateuse-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
  }
}

注意事项 #

  1. 动态更新:此配置为动态配置,可在线修改
  2. 内存消耗:缓存占用 JVM 堆内存
  3. 缓存过期:配合 cache.expire 使用
  4. 命中率监控:监控缓存命中率
  5. 合理设置:根据脚本数量和变化频率调整