
[root@ www.linuxidc.com]# cat /proc/sys/net/ipv4/tcp_rmem
409687380 4161536
87380 :tcp接收缓冲区的默认值
[root@ www.linuxidc.com]# cat /proc/sys/net/ipv4/tcp_wmem
409616384 4161536
16384 : tcp 发送缓冲区的默认值
2. tcp 或udp收发缓冲区最大值
[root@ www.linuxidc.com]# cat /proc/sys/net/core/rmem_max
131071
131071:tcp 或 udp 接收缓冲区最大可设置值的一半。
也就是说调用 setsockopt(s, SOL_SOCKET, SO_RCVBUF, &rcv_size, &optlen) 时rcv_size 如果超过 131071,那么
getsockopt(s, SOL_SOCKET, SO_RCVBUF, &rcv_size, &optlen)去到的值就等于 131071 * 2 = 262142
[root@ www.linuxidc.com]# cat /proc/sys/net/core/wmem_max
131071
131071:tcp 或 udp 发送缓冲区最大可设置值得一半。
跟上面同一个道理
3. udp收发缓冲区默认值
[root@ www.linuxidc.com]# cat /proc/sys/net/core/rmem_default
111616:udp接收缓冲区的默认值
[root@ www.linuxidc.com]# cat /proc/sys/net/core/wmem_default
111616
111616:udp发送缓冲区的默认值
4. tcp 或udp收发缓冲区最小值
tcp 或udp接收缓冲区的最小值为 256 bytes,由内核的宏决定;
tcp 或udp发送缓冲区的最小值为 2048 bytes,由内核的宏决定
要更改容器内的 UDP 缓冲区,可以通过挂载 sysctl.conf 文件来实现。sysctl.conf 文件包含了系统的内核参数设置,可以使用它来更改容器内的 UDP 缓冲区大小。
以下是一些步骤:
在主机上创建一个 sysctl.conf 文件,其中包含要更改的内核参数。例如,要更改 UDP 缓冲区大小,可以在 sysctl.conf 文件中添加以下行:
net.core.rmem_max = 26214400
net.core.wmem_max = 26214400
在运行容器时,将主机上的 sysctl.conf 文件挂载到容器内的 /etc/sysctl.d 目录。例如:
docker run -it --sysctl=/path/to/sysctl.conf centos
在容器内,使用 sysctl 命令来加载新的内核参数设置。例如:
sysctl -p /etc/sysctl.d/sysctl.conf
请注意,如果容器内的 /etc/sysctl.conf 文件是只读的,那么可能需要使用 --privileged 选项来启动容器,以便具有足够的权限来更改该文件。然而,这并不是一个安全的做法,因为容器中的应用程序可能会访问到潜在危险的内核参数设置,所以最好避免使用 --privileged 选项。
有3点值得说明:1. 上面我们仅仅写了接收的内核缓冲区, 关键字是SO_RCVBUF, 如果是发送的内核缓冲区, 那就用SO_SNDBUF, 有兴趣的童鞋可以稍微修改一下上面程序即可。
2. 从程序的结果我们可以看到, sockClient1和sockClient2两者的发送内核缓冲区没有任何关系。
3. 听一网友说过, tcp才有所谓的内核缓冲区, udp没有。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)