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

配置项作用 #

network.tcp.keep_interval 配置项用于控制TCP keepalive 探测包之间的间隔时间

当启用 TCP keepalive 后,如果连接空闲(没有收到响应),系统会按照此间隔持续发送 keepalive probe 来检测连接状态。

配置项属性 #

  • 配置路径: network.tcp.keep_interval
  • 数据类型: Integer(整数,秒)
  • 默认值: -1(使用系统默认值)
  • 最小值: -1
  • 最大值: 300(5分钟)
  • 是否可选: 是
  • 作用域: NodeScope(节点级别)
  • 动态更新: 否(需要重启节点生效)

配置项详解 #

工作机制 #

Keepalive 探测间隔

探测流程:

空闲达到 keep_idle
    │
    ↓
发送探测 1
    │
    ├── 有响应 → 连接正常 ✅
    │              重置空闲计时器
    │
    └── 无响应 → 等待 keep_interval
                  ↓
            发送探测 2
                  │
                  ├── 有响应 → 连接正常 ✅
                  │
                  └── 无响应 → 等待 keep_interval
                                    ↓
                              发送探测 3
                                    ↓
                              ...重复


达到 keep_count
    │
    ↓
关闭连接 ❌

探测时间线 #

Keepalive 完整时间线

keep_idle = 300
keep_interval = 100
keep_count = 9

00:00 ──→ 最后一次数据
05:00 ──→ 达到 keep_idle (300秒)
       ↓
       发送探测 1
       ↓
       等待响应...
       ↓
       无响应 (经过 100 秒)
06:40 ──→ 发送探测 2
       ↓
       等待 100 秒
       ↓
       无响应
08:20 ──→ 发送探测 3
...
       最终 9 次探测后关闭


总超时:
= keep_idle + (keep_interval × keep_count)
= 300 + (100 × 9)
= 1200 秒
= 20 分钟

特殊值说明 #

keep_interval 的特殊值

-1 (默认):
├── 使用系统默认值
├── Linux: 通常 75 秒
├── Windows: 通常 1000 毫秒
├── macOS: 通常 75 秒
└── 推荐使用 ✅


0:
├── 立即重试
├── 不等待间隔
└── 可能产生大量包 ⚠️


正整数 (1-300):
├── 自定义间隔(秒)
├── 例如: 60 (1分钟)
├── 例如: 300 (5分钟)
└── 根据网络环境设置

配置建议 #

生产环境(默认) #

network:
  tcp:
    keep_interval: -1  # 默认值

建议: 保持默认值 -1。使用系统默认值。

快速探测 #

network:
  tcp:
    keep_interval: 60  # 1分钟

建议: 设置为 30-120。需要快速检测死连接时使用。

标准配置 #

network:
  tcp:
    keep_alive: true
    keep_idle: 300
    keep_interval: 300
    keep_count: -1

建议: 设置为 300。与 keep_idle 一致。

高可靠性配置 #

network:
  tcp:
    keep_alive: true
    keep_idle: 300
    keep_interval: 300
    keep_count: 10

建议: 设置为 300。更长间隔节省资源。

代码示例 #

easysearch.yml 基础配置 #

network:
  tcp:
    keep_interval: -1

快速检测配置 #

network:
  tcp:
    keep_alive: true
    keep_idle: 60
    keep_interval: 60
    keep_count: 5

标准配置 #

network:
  tcp:
    keep_alive: true
    keep_idle: 300
    keep_interval: 300
    keep_count: -1

完整 TCP 配置 #

network:
  tcp:
    keep_alive: true
    keep_idle: 300
    keep_interval: 300
    keep_count: -1
    no_delay: true

相关配置 #

配置项作用默认值
network.tcp.keep_alive是否启用 keepalivetrue
network.tcp.keep_idle空闲时间(秒)-1
network.tcp.keep_interval探测间隔(秒)-1
network.tcp.keep_count探测次数-1

性能影响分析 #

keep_interval 设置优点缺点
30-60快速检测死连接网络开销大
120-180平衡检测和开销标准设置
300低网络开销检测较慢
-1(默认)系统默认推荐设置

网络开销对比 #

不同 keep_interval 的探测频率

假设连接处于检测状态,keep_count = 9

keep_interval = 30:
每次间隔: 30 秒
9 次探测总耗时: 270 秒 (4.5 分钟)
网络包数: 9 个
开销: 较高 ⚠️


keep_interval = 100:
每次间隔: 100 秒
9 次探测总耗时: 900 秒 (15 分钟)
网络包数: 9 个
开销: 中等


keep_interval = 300:
每次间隔: 300 秒
9 次探测总耗时: 2700 秒 (45 分钟)
网络包数: 9 个
开销: 较低 ✅

使用场景 #

推荐使用默认值的场景 #

  • 标准环境: 正常的网络环境
  • 系统默认: 相信系统默认配置
  • 生产环境: 大多数生产环境

推荐减少间隔的场景 #

  • 不稳定网络: 网络质量不稳定
  • 快速恢复: 需要快速发现死连接
  • 关键连接: 连接非常重要
  • 检测优先: 检测速度优先于开销

推荐增加间隔的场景 #

  • 稳定网络: 网络非常稳定
  • 节省资源: 希望减少网络开销
  • 长期连接: 连接需要保持很久
  • 带宽有限: 网络带宽有限

与 keep_idle 的关系 #

keep_interval 与 keep_idle 的配合

配置原则:
keep_interval ≤ keep_idle


推荐配置 1: 标准配置
keep_idle: 300
keep_interval: 300
└── 间隔相等,简单直接 ✅


推荐配置 2: 快速检测
keep_idle: 60
keep_interval: 20
└── 间隔短于空闲时间 ✅


推荐配置 3: 系统默认
keep_idle: -1
keep_interval: -1
└── 全部使用系统默认 ✅


错误配置:
keep_idle: 60
keep_interval: 300
└── 间隔大于空闲时间 ❌

系统默认值 #

不同系统的默认 keep_interval

Linux:
/proc/sys/net/ipv4/tcp_keepalive_intvl
默认值: 75 秒
查看: cat /proc/sys/net/ipv4/tcp_keepalive_intvl


Windows:
默认值: 1000 毫秒 (1秒)
注册表: TcpIp\Parameters\KeepAliveInterval


macOS:
默认值: 75 秒
sysctl: net.inet.tcp.keepintvl


使用 -1:
├── 自动使用系统默认值
├── 跨平台一致
├── 无需手动配置
└── 推荐使用 ✅

注意事项 #

  1. 默认值: 默认值为 -1,使用系统默认值。

  2. 需要重启: 修改此配置需要重启节点。

  3. 单位是秒: 配置值的单位是秒,不是毫秒。

  4. 最大值限制: 最大值为 300 秒(5分钟)。

  5. 配合使用: 需要与 keep_idlekeep_count 配合。

  6. 网络开销: 越小的值会产生更多网络开销。

  7. 平台差异: 不同系统的系统默认值不同。

  8. JDK 版本: 需要 JDK 11+ 才能完全支持。

  9. 监控建议: 监控连接异常中断情况。

  10. 测试验证: 配置变更后应验证连接效果。

完整 Keepalive 配置示例 #

不同场景的完整配置

高可用环境:
network.tcp.keep_alive: true
network.tcp.keep_idle: 180
network.tcp.keep_interval: 60
network.tcp.keep_count: 10
├── 3 分钟后开始探测
├── 每 1 分钟探测一次
├── 最多 10 次
└── 适合重要连接 ✅


标准环境:
network.tcp.keep_alive: true
network.tcp.keep_idle: 300
network.tcp.keep_interval: 300
network.tcp.keep_count: -1
├── 5 分钟后开始探测
├── 每 5 分钟探测一次
├── 系统默认次数
└── 适合一般环境 ✅


快速检测环境:
network.tcp.keep_alive: true
network.tcp.keep_idle: 60
network.tcp.keep_interval: 30
network.tcp.keep_count: 3
├── 1 分钟后开始探测
├── 每 30 秒探测一次
├── 最多 3 次
└── 适合快速检测 ✅