Linux相关TCP参数优化: proc/sys/net/ipv4/ 提高web质量

本文详细介绍了TCP参数tcp_wmem、tcp_rmem、tcp_mem等的作用及默认配置,包括发送缓冲、接收缓冲、内存管理等关键信息,并提供了针对不同场景的具体设置建议。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

tcp_wmem(3个INTEGER变量): min, default, max

min:为TCP socket预留用于发送缓冲的内存最小值。每个tcp socket都可以在建议以后都可以使用它。默认值为4096(4K)。

default:为TCP socket预留用于发送缓冲的内存数量,默认情况下该值会影响其它协议使用的net.core.wmem_default 值,一般要低于net.core.wmem_default的值。默认值为16384(16K)。

max: 用于TCP socket发送缓冲的内存最大值。该值不会影响net.core.wmem_max,”静态”选择参数SO_SNDBUF则不受该值影响。默认值为 131072(128K)。(对于服务器而言,增加这个参数的值对于发送数据很有帮助,在我的网络环境中,修改为了51200 131072 204800)

tcp_rmem (3个INTEGER变量): min, default, max

min:为TCP socket预留用于接收缓冲的内存数量,即使在内存出现紧张情况下tcp socket都至少会有这么多数量的内存用于接收缓冲,默认值为8K。

default:为TCP socket预留用于接收缓冲的内存数量,默认情况下该值影响其它协议使用的 net.core.wmem_default 值。该值决定了在tcp_adv_win_scale、tcp_app_win和tcp_app_win=0默认值情况下,TCP窗口大小为65535。 默认值为87380

max:用于TCP socket接收缓冲的内存最大值。该值不会影响 net.core.wmem_max,”静态”选择参数 SO_SNDBUF则不受该值影响。默认值为 128K。默认值为87380*2 bytes。(可以看出,.max的设置最好是default的两倍,对于NAT来说主要该增加它,我的网络里为 51200 131072 204800)

tcp_mem(3个INTEGER变量):low, pressure, high

low:当TCP使用了低于该值的内存页面数时,TCP不会考虑释放内存。(理想情况下,这个值应与指定给 tcp_wmem 的第 2 个值相匹配 – 这第 2 个值表明,最大页面大小乘以最大并发请求数除以页大小 (131072 * 300 / 4096)。 )

pressure:当TCP使用了超过该值的内存页面数量时,TCP试图稳定其内存使用,进入pressure模式,当内存消耗低于low值时则退出 pressure状态。(理想情况下这个值应该是 TCP 可以使用的总缓冲区大小的最大值 (204800 * 300 / 4096)。 )

high:允许所有tcp sockets用于排队缓冲数据报的页面量。(如果超过这个值,TCP 连接将被拒绝,这就是为什么不要令其过于保守 (512000 * 300 / 4096) 的原因了。 在这种情况下,提供的价值很大,它能处理很多连接,是所预期的 2.5 倍;或者使现有连接能够传输 2.5 倍的数据。 我的网络里为192000 300000 732000)

一般情况下这些值是在系统启动时根据系统内存数量计算得到的。

tcp_app_win : INTEGER

默认值是31

保留max(window/2^tcp_app_win, mss)数量的窗口由于应用缓冲。当为0时表示不需要缓冲。

tcp_adv_win_scale : INTEGER

默认值为2

计算缓冲开销bytes/2^tcp_adv_win_scale(如果tcp_adv_win_scale > 0)或者bytes-bytes/2^(-tcp_adv_win_scale)(如果tcp_adv_win_scale <= 0)。

tcp_rfc1337 :BOOLEAN

缺省值为0

这个开关可以启动对于在RFC1337中描述的”tcp 的time-wait暗杀危机”问题的修复。启用后,内核将丢弃那些发往time-wait状态TCP套接字的RST 包.

tcp_low_latency : BOOLEAN

缺省值为0

允许 TCP/IP 栈适应在高吞吐量情况下低延时的情况;这个选项一般情形是的禁用。(但在构建Beowulf 集群的时候,打开它很有帮助)

tcp_westwood :BOOLEAN

缺省值为0

启用发送者端的拥塞控制算法,它可以维护对吞吐量的评估,并试图对带宽的整体利用情况进行优化;对于 WAN 通信来说应该启用这个选项。

tcp_bic :BOOLEAN

缺省值为0

为快速长距离网络启用 Binary Increase Congestion;这样可以更好地利用以 GB 速度进行操作的链接;对于 WAN 通信应该启用这个选项。

# 以下一段为抵抗syn flood攻击,平时建议关闭

sysctl -w net.ipv4.tcp_syncookies=1              # tcp syncookie,默认关闭

sysctl -w net.ipv4.tcp_max_syn_backlog=1280   # syn队列,默认1024,> 1280可能工作不稳定,需要修改内核源码参数

sysctl -w net.ipv4.tcp_synack_retries=2             # syn-ack握手状态重试次数,默认5,遭受syn-flood攻击时改为1或2

sysctl -w net.ipv4.tcp_syn_retries=2                  # 外向syn握手重试次数,默认4

# 以下一段为应对tcp connect连接耗尽攻击,如果开启iptables connlimit模块可禁用

# 有严重连接性能影响和不稳定因素,慎用

sysctl -w tcp_tw_recycle=1                           # 默认0,tw快速回收

sysctl -w tcp_tw_reuse=1                             # 默认0,tw重用

sysctl -w tcp_keepalive_intvl=60                    # 默认75,tcp keeplive探测轮询时间

sysctl -w tcp_keepalive_probes=3                  # 默认9,tcp keeplive探测轮询次数

sysctl -w tcp_keepalive_time=1800                # 默认7200,tcp keeplive时间

sysctl -w tcp_fin_timeout=30                        # 默认60,tcp fin状态超时时间

#sysctl -w net.ipv4.tcp_retries1=5                     # tcp连接重传参数,慎用

#sysctl -w net.ipv4.tcp_retries2=2

sysctl -w net.ipv4.ip_conntrack_max=65535          # 增大iptables状态跟踪表

转载于:https://www.cnblogs.com/bluecarrife/p/7245808.html

<think>首先,用户的问题是关于Linux系统中TCP写内存参数的含义。具体是询问 `cat /proc/sys/net/ipv4/tcp_wmem` 命令的作用及输出解释。我需要基于系统级指令和用户可见层的要求来回答。 回顾系统级指令: - 所有行内数学表达式必须使用 `$...$` 格式。 - 独立公式必须使用 `$$...$$` 格式并单独成段。 - LaTeX语法正确。 - 使用中文回答。 - 生成相关问题。 - 回答中引用的段落末尾自然地添加引用标识,例如 `[^1]`。 用户可见层: - 回答结构清晰,帮助用户逐步解决问题。 - 保证回答真实可靠。 参考的引用内容: - 引用[1]:提到 `/proc/sys/net/ipv4/tcp_wmem` 和 `/proc/sys/net/ipv4/tcp_mem`。 - 引用[2]:解释 `/proc/sys/net/ipv4/` 下的参数,包括 `ip_forward`。 - 引用[3]:详细解释 `tcp_wmem` 和 `tcp_mem` 的含义。 用户的问题焦点在 `tcp_wmem`,所以我需要解释这个参数。 关键点: - `tcp_wmem` 是一个包含三个整数的值:min, default, max。 - 它定义了TCP socket用于发送缓冲的内存设置。 解释 `tcp_wmem`: - min:为TCP socket预留用于发送缓冲的内存最小值。每个TCP socket都可以使用这个值。默认是4096 (4K)。 - default:为TCP socket预留用于发送缓冲的内存数量。默认是16384 (16K)。 - max:用于TCP socket发送缓冲的内存最大值。默认是131072 (128K)。 在回答中,我需要结构化: 1. **解释命令作用**:`cat /proc/sys/net/ipv4/tcp_wmem` 用于显示TCP写缓冲区的内存设置。 2. **输出解释**:输出是三个数字,表示min, default, max。 3. **详细含义**:解释每个值的意义。 4. **添加引用**:在解释末尾添加引用标识,如 `[^3]`。 5. **生成相关问题**:在最后添加相关问题部分。 确保使用中文回答。 结构回答: - 先介绍命令的作用。 - 然后解释输出格式。 - 接着详细说明每个值的含义。 - 最后添加相关问题。 生成相关问题: - 基于主题,如其他TCP参数、如何修改这些参数、优化建议等。 相关问题示例: 1. 如何修改 `/proc/sys/net/ipv4/tcp_wmem` 的值? 2. `tcp_mem` 参数的作用是什么? 3. 这些参数如何影响网络性能? 添加引用:在解释时,引用到引用[3],因为它直接相关。 数学表达式:用户问题中没有数学表达式,但如果有,需要使用指定格式。这里可能不需要。 完整回答框架: 1. 命令作用。 2. 输出解释。 3. 详细参数含义。 4. 相关问题。</think>### `cat /proc/sys/net/ipv4/tcp_wmem` 命令的作用及输出解释 在Linux系统中,`/proc/sys/net/ipv4/tcp_wmem` 是一个内核参数文件,用于管理TCP协议栈的写缓冲区(发送缓冲区)内存设置。执行 `cat /proc/sys/net/ipv4/tcp_wmem` 命令可以查看当前TCP写缓冲区的内存分配配置。该参数直接影响TCP数据传输的性能,特别是在高负载网络环境下,合理配置可优化发送效率和减少延迟[^3]。 #### 命令输出格式 当运行 `cat /proc/sys/net/ipv4/tcp_wmem` 时,输出通常是三个整数值,格式如下: ``` min default max ``` 例如,默认输出可能类似: ``` 4096 16384 131072 ``` 这表示三个内存限制值:最小值(min)、默认值(default)和最大值(max)。单位是字节(bytes)。 #### 输出值的详细解释 1. **min(最小值)**: - 这是为每个TCP socket预留的发送缓冲区内存的最小值。系统在创建socket时,会确保至少分配这么多内存给发送缓冲区。 - 作用:保证基本的发送能力,避免因内存不足导致数据发送失败。 - 默认值:通常为4096字节(4KB)。 - 实际影响:如果网络流量较小,此值可以保持较低;但在高并发连接中,增加此值可能提升小数据包的发送效率[^3]。 2. **default(默认值)**: - 这是新创建的TCP socket初始分配的发送缓冲区内存大小。它会影响其他网络协议使用的默认值(如 `net.core.wmem_default`),但通常低于全局默认值。 - 作用:作为socket的起始缓冲区大小,内核会根据网络条件动态调整(例如,通过TCP拥塞控制算法)。 - 默认值:通常为16384字节(16KB)。 - 实际影响:增加此值可提升数据传输吞吐量,尤其对服务器应用(如Web服务器或数据库)有益,但设置过高可能浪费内存[^3]。 3. **max(最大值)**: - 这是单个TCP socket发送缓冲区内存的上限。它不会影响全局参数(如 `net.core.wmem_max`),但约束了socket在动态调整时能达到的最大值。 - 作用:防止单个连接占用过多内存,确保系统稳定性。 - 默认值:通常为131072字节(128KB)。 - 实际影响:在高带宽场景(如视频流或大文件传输)中,增加此值可减少发送延迟;但需结合系统总内存配置,避免内存耗尽[^3]。 #### 关键注意事项 - **动态调整**:Linux内核会根据网络负载自动调整每个socket的缓冲区大小(在min和max之间),这称为自动调优(Automatic Buffer Tuning)。例如,在拥塞时减少缓冲区,空闲时增加。 - **修改参数**:要临时更改这些值,可使用 `echo "min default max" > /proc/sys/net/ipv4/tcp_wmem`(例如,`echo "8192 32768 262144" > /proc/sys/net/ipv4/tcp_wmem`)。永久修改需编辑 `/etc/sysctl.conf` 文件并添加 `net.ipv4.tcp_wmem = min default max`。 - **性能影响**:优化 `tcp_wmem` 可提升网络吞吐量,但需与相关参数(如 `tcp_rmem` 接收缓冲区)和系统内存(`tcp_mem`)协调。例如,`tcp_mem` 定义了TCP全局内存使用上限,避免资源竞争[^1][^3]。 - **可靠性**:这些参数是内核级设置,调整前应测试性能,不当配置可能导致数据包丢失或系统不稳定。建议参考系统文档或监控工具(如 `netstat` 或 `ss`)验证效果。 通过合理配置 `tcp_wmem`,您可以优化TCP发送性能,尤其在服务器或高流量环境中[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值