当前位置: 首页 > 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.lryc.cn/news/580428.html

相关文章:

  • HarmonyOS学习2---Stage模型
  • 接口测试之apifox的使用
  • 在 Ubuntu 下配置 oh-my-posh —— 普通用户 + root 各自使用独立主题(共享可执行)
  • 常见高危端口风险分析与防护指南
  • java中,stream的filter和list的removeIf筛选速度比较
  • 【网络协议安全】任务12:二层物理和单臂路由及三层vlanif配置方法
  • Docker文件操作、数据卷、挂载
  • 猎板 PCB 微孔技术:构建 5G 通信设备高效运行的坚实底座
  • 冒泡和快速排序的区别
  • 【Note】《深入理解Linux内核》 第十八章:深入理解 ext2 与 ext3 文件系统
  • 人工智能-基础篇-18-什么是RAG(检索增强生成:知识库+向量化技术+大语言模型LLM整合的技术框架)
  • 2025使用VM虚拟机安装配置Macos苹果系统下Flutter开发环境保姆级教程--中篇
  • 【算法笔记】4.LeetCode-Hot100-数组专项
  • 多任务学习-ESMM
  • 隐马尔可夫模型(HMM):观测背后的状态解码艺术
  • STM32HAL库总结
  • HuggingFists: 无代码处理复杂PDF
  • Debian、Buildroot 和 Ubuntu 都是基于 Linux 的系统区别
  • 在VMware虚拟机中安装Windows 98时,Explorer提示“该程序执行了非法操作,即将关闭”的解决办法
  • 若 VSCode 添加到文件夹内右键菜单中显示(通过reg文件方式)
  • linux系统源代码安装apache、编译隐藏版本号
  • ubuntu手动编译VTK9.3 Generating qmltypes file 失败
  • Cursor/VScode ,点击运行按钮,就打开新的终端,如何设置为在当前终端运行文件而不是重新打开终端----一招搞定篇
  • 高频交易服务器篇
  • Redis服务器
  • 【Elasticsearch】检索高亮
  • 【网络与爬虫 13】智能伪装:Scrapy-Fake-UserAgent反检测技术实战指南
  • Matplotlib 安装部署与版本兼容问题解决方案(pyCharm)
  • Vue.js TDD开发深度指南:工具链配置与精细化测试策略
  • Linux(centos)安装 MySQL 8