当前位置: 首页 > news >正文

【网络】Linux 内核优化实战 - net.ipv4.tcp_keepalive_probes

目录

      • 1. TCP Keep-Alive 机制回顾
      • 2. 参数作用
      • 3. 参数取值与影响
      • 4. 使用场景与建议
      • 5. 相关参数
      • 6. 如何配置该参数
        • 临时生效(重启后失效):
        • 永久生效(需重启或重载配置):
      • 7. 性能优化建议
      • 8. 监控与故障排查

net.ipv4.tcp_keepalive_probes 是 Linux 内核中的一个 TCP 参数,用于控制在认定连接失效前,最多发送多少个 TCP 保活探测包(Keep-Alive Probes)。以下是对该参数的详细解析:

1. TCP Keep-Alive 机制回顾

TCP Keep-Alive 是一种检测长时间空闲连接是否仍然有效的机制。当连接处于空闲状态超过 tcp_keepalive_time(默认 2 小时)后,TCP 会每隔 tcp_keepalive_intvl(默认 75 秒)发送一个保活探测包。

tcp_keepalive_probes 决定了在没有收到对端响应的情况下,最多发送多少次探测包。如果连续发送这么多次探测包后仍未收到响应,内核会认为连接已断开,并关闭该连接。

2. 参数作用

该参数直接影响TCP 连接在异常断开时的检测时间。计算公式为:

连接超时总时间 = tcp_keepalive_time + (tcp_keepalive_probes × tcp_keepalive_intvl)

例如,默认配置下(tcp_keepalive_time=7200tcp_keepalive_probes=9tcp_keepalive_intvl=75):

总超时时间 = 7200 + (9 × 75) = 7200 + 675 = 7875 秒 ≈ 2 小时 11 分钟

3. 参数取值与影响

  • 默认值:9 次。
  • 减小该值(如 3 次):
    • 优点:更快发现断开的连接(例如,若 intvl=75,则探测时间缩短至 3×75=225 秒,约 3.75 分钟)。
    • 缺点:可能误判连接断开(如网络暂时拥塞导致探测包丢失)。
  • 增大该值(如 15 次):
    • 优点:减少误判概率,适应高延迟或不稳定网络。
    • 缺点:连接断开后,应用需要更长时间才能感知(例如,探测时间延长至 15×75=1125 秒,约 18.75 分钟)。

4. 使用场景与建议

  • 适合减小 tcp_keepalive_probes 的场景

    • 高可用性系统:快速发现故障节点,触发自动重试或负载均衡。
    • 稳定网络环境(如数据中心内部):网络丢包率低,无需多次探测。
  • 适合增大 tcp_keepalive_probes 的场景

    • 高延迟或不稳定网络(如广域网、移动网络):容忍偶尔的探测包丢失。
    • 对误判敏感的应用(如金融交易系统):避免因暂时的网络波动中断正常连接。

5. 相关参数

与 TCP Keep-Alive 相关的其他重要参数:

  • net.ipv4.tcp_keepalive_time:连接空闲多久后开始发送保活探测包(默认 7200 秒)。
  • net.ipv4.tcp_keepalive_intvl:两次探测包之间的间隔时间(默认 75 秒)。
  • net.ipv4.tcp_retries2:TCP 重传次数上限(影响连接断开的最终判断)。

6. 如何配置该参数

临时生效(重启后失效):
# 设置最多发送 5 次保活探测包
sudo sysctl -w net.ipv4.tcp_keepalive_probes=5
永久生效(需重启或重载配置):
# 编辑配置文件
sudo vim /etc/sysctl.conf# 添加或修改一行
net.ipv4.tcp_keepalive_probes = 5# 使配置生效
sudo sysctl -p

7. 性能优化建议

  • 高可用性短连接场景

    net.ipv4.tcp_keepalive_time = 300    # 5 分钟
    net.ipv4.tcp_keepalive_intvl = 15     # 15 秒间隔
    net.ipv4.tcp_keepalive_probes = 3     # 3 次探测
    

    总超时时间 = 300 + (3×15) = 345 秒(约 5.75 分钟)

  • 长连接低延迟场景

    net.ipv4.tcp_keepalive_time = 1800    # 30 分钟
    net.ipv4.tcp_keepalive_intvl = 60     # 1 分钟间隔
    net.ipv4.tcp_keepalive_probes = 5     # 5 次探测
    

    总超时时间 = 1800 + (5×60) = 2100 秒(约 35 分钟)

8. 监控与故障排查

检查当前 Keep-Alive 设置:

sysctl net.ipv4.tcp_keepalive_time
sysctl net.ipv4.tcp_keepalive_intvl
sysctl net.ipv4.tcp_keepalive_probes

若发现大量处于 ESTABLISHED 状态但实际已断开的连接,可能需要:

  1. 减小 tcp_keepalive_timetcp_keepalive_probes 以更快检测失效连接。
  2. 增大 tcp_keepalive_intvl 以减少探测频率,降低网络开销。

通过合理配置 tcp_keepalive_probes,可以在快速发现失效连接和避免误判之间取得平衡,尤其适合需要长时间维持大量连接的服务器应用(如 Web 服务器、数据库连接池)。

http://www.dtcms.com/a/272761.html

相关文章:

  • linux系统---部署应用
  • day049-初识Ansible与常用模块
  • 如何远程访问在WSL运行的Jupyter Notebook
  • 如何安装python以及jupyter notebook
  • 创客匠人洞察:AI 时代创始人 IP 打造如何突破效率与价值的平衡
  • RabbitMQ 高级特性之消息分发
  • 【Fargo】发送一个rtp包的过程1:怎么统一加twcc序号
  • 华锐云空间展销编辑器:开启数字化展示新时代​
  • U-Boot 2025.07 引入的 “uthreads” 优势介绍
  • 什么是主链
  • 【会员专享数据】2013-2024年我国省市县三级逐月SO₂数值数据(Shp/Excel格式)
  • 使用EasyExcel动态合并单元格(模板方法)
  • RK3568项目(八)--linux驱动开发之基础外设(上)
  • 亚马逊运营中出单词反查
  • 机器学习:反向神经元传播公式推导
  • 记录今天学习Comfyui的感受
  • python正则表达式(小白五分钟从入门到精通)
  • 智能化时代下的门店运营:AI的深刻影响
  • 2025年第十五届APMCM亚太地区大学生数学建模竞赛(中文赛项)
  • 【C++】红黑树的底层思想 and 大厂面试常问
  • BootStrap
  • 售前:该站高位思考还是站低位思考
  • Codeforces Round 1034 (Div. 3) G题题解记录
  • 创建本地软件仓库(rhel7与rhel9)
  • HighReport报表工具开始支持BS报表设计器
  • SW-CA(多平台产品上架系统)
  • uni-app 途径站点组件开发与实现分享
  • 体积超过2MB?uniapp小程序分包上传
  • [论文阅读]Text Compression for Efficient Language Generation
  • Go语言包管理完全指南:从基础到最佳实践