影响Socket缓存的参数
在proc目录下,它们的路径和对应说明为
/proc/sys/net/core/rmem_default
/proc/sys/net/core/rmem_max
/proc/sys/net/core/wmem_default
/proc/sys/net/core/wmem_max
这些文件用来设置所有socket的发送和接收缓存大小,所以既影响TCP,也影响UDP。
针对UDP:
这些参数实际的作用跟 SO_RCVBUF 和 SO_SNDBUF 的 socket option 相关。如果我们不用setsockopt去更改创建出来的 socket buffer 长度的话,那么就使用 rmem_default 和 wmem_default 来作为默认的接收和发送的 socket buffer 长度。如果修改这些socket option的话,那么他们可以修改的上限是由 rmem_max 和 wmem_max 来限定的。
针对TCP:
除了以上四个文件的影响外,还包括如下文件:
/proc/sys/net/ipv4/tcp_rmem
/proc/sys/net/ipv4/tcp_wmem
对于TCP来说,上面core目录下的四个文件的作用效果一样,只是默认值不再是 rmem_default 和 wmem_default ,而是由 tcp_rmem 和 tcp_wmem 文件中所显示的第二个值决定。通过setsockopt可以调整的最大值依然由rmem_max和wmem_max限制。
查看tcp_rmem和tcp_wmem的文件内容会发现,文件中包含三个值:
cat /proc/sys/net/ipv4/tcp_rmem
4096 131072 6291456
cat /proc/sys/net/ipv4/tcp_wmem
4096 16384 4194304
三个值依次表示:min default max
min:决定 tcp socket buffer 最小长度。
default:决定其默认长度。
max:决定其最大长度。在一个tcp链接中,对应的buffer长度将在min和max之间变化。导致变化的主要因素是当前内存压力。如果使用setsockopt设置了对应buffer长度的话,这个值将被忽略。相当于关闭了tcp buffer的动态调整。
/proc/sys/net/ipv4/tcp_moderate_rcvbuf
这个文件是服务器是否支持缓存动态调整的开关,1为默认值打开,0为关闭。
注意:本文归作者所有,未经作者允许,不得转载