本文目录导读:

net.core.rmem_default 是 Linux 内核参数,用于设置接收套接字(socket)默认缓冲区大小(以字节为单位),它影响所有类型的网络协议(TCP、UDP、UNIX 域套接字等)的默认接收缓冲区。
如何设置(三种方法)
临时生效(重启后失效,用于测试)
# 设置为 262144 字节(256KB) sudo sysctl -w net.core.rmem_default=262144 # 立即查看是否生效 sysctl net.core.rmem_default
永久写入配置文件(推荐)
编辑 /etc/sysctl.conf 或在 /etc/sysctl.d/ 下创建自定义文件(如 99-network.conf):
# 在文件末尾添加 net.core.rmem_default = 262144
然后加载配置:
sudo sysctl -p # 或指定文件 sudo sysctl -p /etc/sysctl.d/99-network.conf
通过内核接口直接写入
echo 262144 | sudo tee /proc/sys/net/core/rmem_default
但此方法与 sysctl -w 效果相同,也是临时生效。
关键说明与注意事项
-
单位:字节,常用值参考(单位:字节):
212992(约 208KB) – 大多数发行版默认值262144(256KB) – 通用推荐524288(512KB) – 高吞吐场景1048576(1MB) – 内存充裕时的极端场景
-
与其他参数的关系:
net.core.rmem_max(硬上限):应用程序通过SO_RCVBUF能设置的最大值。rmem_default不能超过rmem_max。net.ipv4.tcp_rmem:TCP 协议的三个值(min/default/max),会覆盖net.core.rmem_default,如果主要关心 TCP,应调整tcp_rmem的第二个值。net.core.wmem_default(对应发送缓冲区)
-
生效范围:
- 对新创建的套接字生效,已存在的连接不受影响。
- 应用程序可以通过
setsockopt()设置SO_RCVBUF覆盖此默认值。
-
检查当前值:
sysctl net.core.rmem_default cat /proc/sys/net/core/rmem_default
-
常见应用场景:
- UDP 高吞吐:UDP 使用此参数作为默认接收缓冲区,增大它可以减少丢包。
- TCP 性能调优:虽然 TCP 有独立参数,但某些环境下
rmem_default作为下限参考。
示例:完整的网络缓冲区调优(含 TCP)
# /etc/sysctl.d/99-network.conf # 接收缓冲区 net.core.rmem_default = 262144 net.core.rmem_max = 4194304 # 发送缓冲区 net.core.wmem_default = 262144 net.core.wmem_max = 4194304 # TCP 特定(自动调整) net.ipv4.tcp_rmem = 4096 131072 6291456 net.ipv4.tcp_wmem = 4096 65536 4194304 # 开启 TCP 窗口缩放(大窗口支持) net.ipv4.tcp_window_scaling = 1
- 临时测试:
sudo sysctl -w net.core.rmem_default=262144 - 永久设置:编辑
/etc/sysctl.d/*.conf→sudo sysctl -p - 必须同时考虑
rmem_max(硬上限)和tcp_rmem(若优化 TCP)
根据你的网络类型(TCP/UDP/其他)选择合适的参数进行联动调整,如果只设置 rmem_default 而未设置 rmem_max,应用程序可能无法请求更大的缓冲区。
标签: Linux内核参数
版权声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。