--- title: "TCP Keepalive 探测间隔配置" date: 2026-02-01 lastmod: 2026-02-01 description: "network.tcp.keep_interval 配置项用于控制 TCP keepalive 探测包之间的间隔时间。" tags: ["网络", "TCP", "Keepalive", "连接保活"] summary: "配置项作用 # 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 ↓ ." --- ## 配置项作用 `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分钟) └── 根据网络环境设置 ``` ## 配置建议 ## 生产环境(默认) ```yaml network: tcp: keep_interval: -1 # 默认值 ``` **建议**: 保持默认值 `-1`。使用系统默认值。 ## 快速探测 ```yaml network: tcp: keep_interval: 60 # 1分钟 ``` **建议**: 设置为 `30-120`。需要快速检测死连接时使用。 ## 标准配置 ```yaml network: tcp: keep_alive: true keep_idle: 300 keep_interval: 300 keep_count: -1 ``` **建议**: 设置为 `300`。与 keep_idle 一致。 ## 高可靠性配置 ```yaml network: tcp: keep_alive: true keep_idle: 300 keep_interval: 300 keep_count: 10 ``` **建议**: 设置为 `300`。更长间隔节省资源。 ## 代码示例 ## easysearch.yml 基础配置 ```yaml network: tcp: keep_interval: -1 ``` ## 快速检测配置 ```yaml network: tcp: keep_alive: true keep_idle: 60 keep_interval: 60 keep_count: 5 ``` ## 标准配置 ```yaml network: tcp: keep_alive: true keep_idle: 300 keep_interval: 300 keep_count: -1 ``` ## 完整 TCP 配置 ```yaml 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. **默认值**: 默认值为 `-1`,使用系统默认值。 2. **需要重启**: 修改此配置需要重启节点。 3. **单位是秒**: 配置值的单位是秒,不是毫秒。 4. **最大值限制**: 最大值为 300 秒(5分钟)。 5. **配合使用**: 需要与 `keep_idle` 和 `keep_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 次 └── 适合快速检测 ✅ ```