TCP缓冲区参数调优

1、系统原值查询


[lyb@admin autopush]$ cat /proc/sys/net/core/rmem_max
4194304
[lyb@admin autopush]$ cat /proc/sys/net/core/wmem_max
1048576
[lyb@admin autopush]$ cat /proc/sys/net/ipv4/tcp_rmem
4096    87380   4194304
[lyb@admin autopush]$ cat /proc/sys/net/ipv4/tcp_wmem
4096    16384   4194304
[lyb@admin autopush]$  cat /proc/sys/net/ipv4/tcp_mem
3073344 4097792 6146688

2、设置值


#如此操作后的设置在系统重启后会恢复为原值
echo 16777216 > /proc/sys/net/core/rmem_max
echo 16777216 > /proc/sys/net/core/wmem_max
echo "4096 873800 16777216" > /proc/sys/net/ipv4/tcp_rmem
echo "4096 873800 16777216" > /proc/sys/net/ipv4/tcp_wmem
echo "3073344 4097792 16777216" > /proc/sys/net/ipv4/tcp_mem

3、参数解析

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)。(对于服务器而言,增加这个参数的值对于发送数据很有帮助)

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)

4、特别提醒

对/proc/sys/net目录下内容的修改都是临时的,任何修改在系统重启后都会丢失。若要永久性设置,则在文件/etc/sysctl.conf中设置如下:

net.core.rmem_default = 16777216

net.core.rmem_max = 16777216

net.core.wmem_default = 16777216

net.core.wmem_max = 16777216

net.ipv4.tcp_mem = 6177504 8236672 16777216

net.ipv4.tcp_rmem = 4096 873800 16777216

net.ipv4.tcp_wmem = 4096 873800 16777216

/etc/sysctl.conf是一个允许你改变正在运行中的Linux系统的接口。它包含一些TCP/IP堆栈和虚拟内存系统的高级选项,可用来控制Linux网络配置,由于/proc/sys/net目录内容的临时性,建议把TCPIP参数的修改添加到/etc/sysctl.conf文件, 然后保存文件,使用命令“/sbin/sysctl –p”使之立即生效。

你可能感兴趣的:(开发常见,tcp/ip,网络,服务器)