配置项作用 #
http.tcp.keep_interval 配置项用于控制TCP Keep-Alive 探测包之间的发送间隔时间。
当连接空闲超过 keep_idle 时间后,Keep-Alive 机制开始发送探测包。如果探测包未收到响应,系统会按照此配置指定的时间间隔继续发送后续的探测包。
配置项属性 #
- 配置路径:
http.tcp.keep_interval - 数据类型:
Integer(整数,单位:秒) - 默认值:
-1(使用系统默认值) - 最小值:
-1(表示使用系统默认) - 最大值:
300(5分钟) - 是否可选: 是
- 作用域: NodeScope(节点级别)
配置项详解 #
工作机制 #
TCP Keep-Alive 探测间隔流程
连接空闲超过 keep_idle
│
↓
发送第 1 个探测包
│
├──────── 收到响应 ✅
│ ↓
│ 连接正常,重置计时器
│
└──────── 未收到响应
↓
等待 keep_interval 秒
↓
发送第 2 个探测包
│
├──────── 收到响应 ✅
│ ↓
│ 连接正常,重置计时器
│
└──────── 未收到响应
↓
等待 keep_interval 秒
↓
发送第 3 个探测包
│
│ ... 循环 ...
│
↓
发送第 keep_count 个探测包
│
├──────── 收到响应 ✅
│ ↓
│ 连接正常,重置计时器
│
└──────── 仍未收到响应 ❌
↓
判定连接断开
探测间隔时间的影响 #
keep_interval = 5s(短间隔):
探测时间线:
0s ──→ 5s ──→ 10s ──→ 15s ──→ 20s
│ │ │ │ │
探测1 等待 探测2 等待 探测3
优点: 快速检测断开
缺点: 更多网络流量
keep_interval = 60s(长间隔):
探测时间线:
0s ────→ 60s ────→ 120s ────→ 180s
│ │ │ │
探测1 等待 探测2 等待
优点: 减少网络流量
缺点: 检测断开较慢
总超时时间计算 #
连接断开检测的总时间
总超时 = keep_idle + (keep_interval × keep_count)
示例 1: 快速检测配置
keep_idle = 10s
keep_interval = 2s
keep_count = 5
总超时 = 10 + (2 × 5) = 20 秒
示例 2: 标准配置
keep_idle = 60s
keep_interval = 10s
keep_count = 5
总超时 = 60 + (10 × 5) = 110 秒
示例 3: 云环境配置
keep_idle = 30s
keep_interval = 5s
keep_count = 8
总超时 = 30 + (5 × 8) = 70 秒
配置建议 #
生产环境(默认) #
http:
tcp:
keep_alive: true
keep_interval: -1 # 使用系统默认
建议: 保持默认值 -1。系统默认值通常适用于大多数场景。
快速故障检测 #
http:
tcp:
keep_alive: true
keep_idle: 30
keep_interval: 5
keep_count: 5
建议: 设置为 5-15 秒。当需要快速检测连接断开时使用。
不稳定网络环境 #
http:
tcp:
keep_alive: true
keep_idle: 60
keep_interval: 15
keep_count: 8
建议: 设置为 15-30 秒。当网络质量不稳定时使用。
云环境配置 #
http:
tcp:
keep_alive: true
keep_idle: 20
keep_interval: 3
keep_count: 10
建议: 设置为 3-10 秒。云环境可能需要更频繁的探测。
代码示例 #
easysearch.yml 基础配置 #
http:
tcp:
keep_alive: true
keep_interval: -1 # 使用系统默认
完整 TCP Keep-Alive 配置 #
http:
tcp:
keep_alive: true
keep_idle: 60
keep_interval: 10
keep_count: 8
敏感检测配置 #
http:
tcp:
keep_alive: true
keep_idle: 10
keep_interval: 2
keep_count: 3
高可靠性配置 #
http:
tcp:
keep_alive: true
keep_idle: 120
keep_interval: 20
keep_count: 10
相关配置 #
| 配置项 | 作用 | 默认值 |
|---|---|---|
http.tcp.keep_alive | 是否启用 Keep-Alive | true |
http.tcp.keep_idle | 空闲等待时间(秒) | -1(系统默认) |
http.tcp.keep_interval | 探测间隔时间(秒) | -1(系统默认) |
http.tcp.keep_count | 探测重试次数 | -1(系统默认) |
系统默认值参考 #
不同操作系统的默认 keep_interval
Linux:
- 默认值: 75 秒
- 查看命令: cat /proc/sys/net/ipv4/tcp_keepalive_intvl
- 调整命令: sysctl -w net.ipv4.tcp_keepalive_intvl=15
macOS:
- 默认值: 75 秒
- 查看命令: sysctl net.inet.tcp.keepintvl
- 调整命令: sysctl -w net.inet.tcp.keepintvl=15
Windows:
- 默认值: 通常为 1000 毫秒(1 秒)
- 可通过注册表调整
- 默认值在不同版本可能不同
当 keep_interval = -1 时,使用系统默认值
使用场景 #
推荐使用系统默认的场景 #
- 标准生产环境: 系统默认值通常已经过充分测试
- 稳定网络: 网络质量良好,延迟较低
- 不确定配置值: 不确定应该设置多少时使用默认
推荐设置较短间隔的场景 #
- 快速故障转移: 需要快速检测连接断开
- 实时性要求高: 应用对延迟敏感
- 云环境: 虚拟网络可能有额外的变化
推荐设置较长间隔的场景 #
- 带宽受限: 希望减少 Keep-Alive 探测包数量
- 大规模部署: 节点数量多,需要控制网络流量
- 稳定内网: 网络环境极其稳定
探测间隔调优 #
确定合适的 keep_interval #
步骤 1: 计算总超时时间
总超时 = keep_idle + (keep_interval × keep_count)
确定应用能接受的最大超时时间
步骤 2: 固定其他参数
通常 keep_count 较为固定(如 5-8)
keep_idle 根据网络设备超时设置
步骤 3: 计算 keep_interval
keep_interval = (总超时 - keep_idle) / keep_count
例如,希望总超时 60 秒:
keep_idle = 30, keep_count = 5
keep_interval = (60 - 30) / 5 = 6 秒
步骤 4: 测试验证
在实际环境中测试
监控连接断开检测时间
根据实际情况调整
网络流量分析 #
Keep-Alive 探测包流量
假设配置:
keep_idle = 60s
keep_interval = 10s
keep_count = 5
每小时流量计算:
场景 1: 连接正常(第一次探测收到响应)
每 60 秒发送 1 个探测包
每小时 = 3600 / 60 = 60 个探测包
探测包大小 ≈ 40 bytes
总流量 ≈ 60 × 40 = 2400 bytes/hour
场景 2: 连接断开(所有探测都失败)
每 60 秒 + (5 × 10) = 110 秒一个周期
每小时 ≈ 3600 / 110 ≈ 33 个周期
每个周期 = 5 个探测包
总探测包 ≈ 33 × 5 = 165 个
总流量 ≈ 165 × 40 = 6600 bytes/hour
常见问题排查 #
问题 1: 连接断开检测过慢 #
现象: 连接断开后很长时间才检测到
原因: keep_interval 设置过大
解决: 减小 keep_interval
keep_interval: 60 → 10
问题 2: 过多 Keep-Alive 流量 #
现象: 网络中出现大量 Keep-Alive 探测包
原因: keep_interval 设置过小
解决: 增大 keep_interval
keep_interval: 2 → 15
问题 3: 误判网络抖动 #
现象: 网络暂时抖动被误判为连接断开
原因: keep_interval 过小,keep_count 也较小
解决: 增大 keep_interval 和 keep_count
keep_interval: 3 → 10
keep_count: 3 → 8
注意事项 #
最大值限制: 配置最大值为 300 秒(5 分钟)。
平台支持: 需要 Linux 或 macOS 平台才能设置此参数。
JDK 版本: Java 11+ 提供了完整的 TCP Keep-Alive 参数支持。
必须启用 keep_alive: 只有在
http.tcp.keep_alive = true时此配置才生效。与 keep_count 配合: 两者共同决定了连接断开检测的总时间。
网络流量: 较小的间隔会产生更多的探测包和网络流量。
总超时计算: 连接断开检测的总时间 =
keep_idle + (keep_interval × keep_count)。动态更新: 此配置不支持动态更新,修改后需要重启节点。
系统默认优先: 设置为
-1时使用系统默认值(Linux/macOS 通常为 75 秒)。监控建议: 监控 Keep-Alive 探测的频率和连接断开检测时间,评估配置效果。





