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

【内存】Linux 内核优化实战 - net.ipv4.tcp_max_tw_buckets

目录

  • `net.ipv4.tcp_max_tw_buckets` 详解
    • 一、基本概念
    • 二、核心作用
    • 三、默认值
    • 四、调整场景
      • 需增大参数的场景
      • 需减小参数的场景
    • 五、查看与修改方法
      • 1. 查看当前值
      • 2. 临时修改(重启失效)
      • 3. 永久修改(重启生效)
    • 六、注意事项
    • 总结

net.ipv4.tcp_max_tw_buckets 详解

一、基本概念

net.ipv4.tcp_max_tw_buckets 是 Linux 内核中用于限制系统同时处于 TIME_WAIT 状态的 TCP 连接最大数量的参数。

  • TIME_WAIT 状态:TCP 连接关闭时的一个必经状态,主要作用是:
    • 确保最后一个 ACK 包成功送达对端;
    • 防止延迟的重传包干扰新连接。

二、核心作用

  1. 限制资源占用:避免 TIME_WAIT 连接过多导致系统内存、端口等资源耗尽。
  2. 保护机制:当 TIME_WAIT 连接数达到该参数值时,内核会强制关闭超出的连接,并在日志(如 /var/log/messages)中记录警告:
    tcp: time wait bucket table overflow

三、默认值

  • 通常与系统内存相关,计算公式为 总内存(MB)× 4(例如 1GB 内存默认值约为 4096)。
  • 部分 Linux 发行版可能采用固定值(如 180000),具体以系统实际配置为准。

四、调整场景

需增大参数的场景

  • 高并发服务(如 Web 服务器、代理服务器),需处理大量短期连接(如 HTTP 短连接)。
  • 系统频繁出现 time wait bucket table overflow 日志,且业务受影响。

需减小参数的场景

  • TIME_WAIT 连接过多导致系统卡顿、端口耗尽(如无法建立新连接)。
  • 资源紧张的服务器(如小内存设备),需快速释放闲置连接。

五、查看与修改方法

1. 查看当前值

cat /proc/sys/net/ipv4/tcp_max_tw_buckets

2. 临时修改(重启失效)

echo <新值> > /proc/sys/net/ipv4/tcp_max_tw_buckets
# 示例:echo 300000 > /proc/sys/net/ipv4/tcp_max_tw_buckets

3. 永久修改(重启生效)

  1. 编辑 /etc/sysctl.conf 文件,添加或修改:
    net.ipv4.tcp_max_tw_buckets = <新值>
    
  2. 执行以下命令使配置生效:
    sysctl -p
    

六、注意事项

  1. 与端口资源的关系

    • 系统可用端口范围通常为 32768-60999(约 28000 个),参数值不应远大于此范围,否则可能导致端口耗尽。
    • 可通过 cat /proc/sys/net/ipv4/ip_local_port_range 查看端口范围。
  2. 与其他参数配合优化

    参数作用建议配置
    tcp_tw_reuse允许 TIME_WAIT 连接复用高并发场景设为 1
    tcp_tw_recycle快速回收 TIME_WAIT 连接需谨慎启用(可能引发NAT环境问题)
    tcp_fin_timeoutTIME_WAIT 状态超时时间默认 60 秒,可缩短至 30 秒
  3. 操作建议

    • 调整前先在测试环境验证,观察业务稳定性。
    • 结合实际连接数(可通过 ss -ant | grep TIME-WAIT | wc -l 查看)动态调整。

总结

net.ipv4.tcp_max_tw_buckets 是平衡系统资源与连接稳定性的关键参数,需根据业务类型(如高并发短连接)、系统配置(内存、端口)灵活调整,避免过大或过小导致服务异常。

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

相关文章:

  • [创业之路-474]:企业经营层 - 小米与华为多维对比分析(2025年视角),以后不要把这两家公司放在同一个维度上 进行比较了
  • Springboot应用WebSocket服务测试
  • 软著难不难,申请
  • cocos 打包安卓
  • 《Redis》哨兵模式
  • 安达发|APS自动排产软件与服装行业的深度融合:智能制造时代的效率革命
  • 图灵完备之路(数电学习三分钟)----解码器
  • PI 控制器与 PR 控制器的等效转换与应用详解
  • 【深度学习】神经网络剪枝方法的分类
  • 【openp2p】 学习2:源码阅读P2PNetwork和P2PTunnel
  • 深入解读 Java CompletableFuture:设计原理与源码分析
  • [Cyclone] docs | 主程序逻辑 | 地址解码器 | P2PKH地址
  • Python 机器学习核心入门与实战进阶 Day 3 - 决策树 随机森林模型实战
  • TailWind CSS Intellisense 插件在VSCode 上不生效
  • 蓝桥杯51单片机设计
  • 在VMware虚拟机中安装Windows 98时,Explorer提示“该程序执行了非法操作,即将关闭”的解决办法
  • PADS交互式布局
  • SwiftUI 7(iOS 26)中玻璃化工具栏的艺术
  • Qt开发:QListWidget的介绍和使用
  • Java面试宝典:BIO、NIO、AIO原理演进与实际应用深度实践
  • Ubuntu 安装 etcd 与 etcd-cpp-apiv3
  • 开发三维CAD:实现框选和反选功能
  • 翻译《The Old New Thing》- Windows 媒体目录中 onestop.mid 文件的故事
  • mybatis-plus-01-环境初始化及简单应用
  • 基于uni-app的书法学习管理小程序的设计与实现
  • Java IO相关技术小结
  • SpringCloud系列(51)--SpringCloud Stream之使用分组解决消息重复消费问题
  • 你的Prompt还有很大提升
  • PyTorch中 item()、tolist()使用详解和实战示例
  • 企业微信iPad协议端强制拉群漏洞深度分析