配置项作用 #
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 | 是否启用 keepalive | true |
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,使用系统默认值。需要重启: 修改此配置需要重启节点。
单位是秒: 配置值的单位是秒,不是毫秒。
最大值限制: 最大值为 300 秒(5分钟)。
配合使用: 需要与
keep_idle和keep_count配合。网络开销: 越小的值会产生更多网络开销。
平台差异: 不同系统的系统默认值不同。
JDK 版本: 需要 JDK 11+ 才能完全支持。
监控建议: 监控连接异常中断情况。
测试验证: 配置变更后应验证连接效果。
完整 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 次
└── 适合快速检测 ✅





