首页/系统/Linux 内核与性能调优速查/net.core.rmem_default / wmem_default 默认缓冲
sysctl 内核参数72 条

net.core.rmem_default / wmem_default 默认缓冲

每个新套接字的默认收发缓冲(各 212992 字节);未显式 setsockopt 的应用直接继承,TCP 自动调优在此基础上工作。

参数是什么

net.core.rmem_default 与 net.core.wmem_default 是新套接字的默认接收/发送缓冲大小,单位字节,现代内核常见值 212992(约 208 KiB)。应用创建 socket 时没有显式调用 setsockopt(SO_RCVBUF/SO_SNDBUF) 的话,就继承这两个默认值;TCP 还会在此基础上按内核文档口径取 tcp_rmem[1] 与 rmem_default 中较小者作为实际默认,再交给自动调优在 tcp_rmem/tcp_wmem 区间内调整。

基本信息

适用平台Linux 全平台(CentOS/RHEL、Ubuntu/Debian、SUSE)
参数net.core.rmem_default、net.core.wmem_default
常见默认212992 字节;老版本内核更小
相关上限net.core.rmem_max、net.core.wmem_max(setsockopt 可设的最大值)
覆盖方式应用层 setsockopt(SO_RCVBUF/SO_SNDBUF),或 fd 上的 SO_RCVBUFFORCE
持久化/etc/sysctl.d/*.conf + sysctl --system

典型使用场景

  • 高 QPS 的 UDP 服务(DNS、syslog、监控采集)出现丢包,而应用没有设置 SO_RCVBUF,默认接收缓冲过小是常见嫌疑
  • 高并发短连接服务(HTTP 网关、代理)不想为每个连接显式调缓冲,改为抬高全局默认值统一生效
  • 与 tcp_rmem/tcp_wmem 自动调优配合评估:默认值过大时可能压制自动调优的灵活性
  • 交付统一基线:把网络缓冲默认值写进镜像或配置管理,避免每台机器行为不一致
  • 大文件传输(rsync、scp、备份)调优时,用 ss -m 核对连接实际的 skmem 分配

查看与调整

查看与调整
sysctl net.core.rmem_default net.core.wmem_default  # 查看当前默认值
sysctl net.core.rmem_max net.core.wmem_max  # 同时看上限,确认改默认值不会越界
ss -m -t state established  # -m 打印每条连接的 skmem 缓冲分配明细
sysctl -w net.core.rmem_default=1048576  # 临时生效,重启回退
printf 'net.core.rmem_default = 1048576\nnet.core.wmem_default = 1048576\n' > /etc/sysctl.d/90-netbuf.conf
sysctl --system  # 重载并回显,确认写入被接受

每连接内存成本

项目典型值说明
接收默认缓冲212992 字节每个未显式设置的套接字基数
发送默认缓冲212992 字节同上
一万并发连接上界约 4 GiB按 2×212992×10000 估算,属理论上界
实际占用通常远小于上界内核按需分页分配,空闲缓冲不占满;但峰值并发下会接近上界
修改默认值对已存在的套接字无效,只影响之后新建的连接;在线服务需要重启进程或接受「只对新连接生效」的过渡期。容器内 /proc/sys/net/core 默认只读或为独立命名空间,必须改宿主 netns 才影响容器流量。
判断「调大有没有用」的唯一可靠办法是看连接实际值:ss -m 输出的 skmem 中 rcvbuf/sndbuf 是该 socket 的真实设置,而 rmem_default 只是它的来源。

易错点

  • 只抬 rmem_default/wmem_default 不动 rmem_max/wmem_max:应用 setsockopt 想设置更大值时被上限截断,看起来「设了没效果」
  • 把默认值当成 TCP 吞吐的万能开关:现代内核按 tcp_rmem/tcp_wmem 自动调优,且吞吐受带宽时延积限制,单改默认值常常没有任何可见变化
  • UDP 丢包只盯默认缓冲:应用若已 setsockopt 覆盖或用了 SO_RCVBUFFORCE,实际值由应用决定,必须用 ss -m 核实
  • 按上界估算内存导致误判:缓冲是懒分配,直接把 2×默认值×并发数当作实际占用会高估几倍
  • sysctl -w 不持久:重启后回退到旧值,故障在重启后才复现,排查时会怀疑自己记错

数据来源与参考

  • Linux 内核 Documentation/admin-guide/sysctl/net.rst
  • man 7 socket
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌