直接用 sysctl -w 可临时修改 net.core.wmem_default(单位字节),仅影响新建 socket;需同步调整 net.core.wmem_max 防止 setsockopt 失败;永久生效需写入 /etc/sysctl.conf 并执行 sysctl -p。

直接用 sysctl -w 命令就能修改 net.core.wmem_default,这是设置所有新创建套接字(包括 UDP 和 TCP)默认发送缓冲区大小最常用的方式。注意它只影响后续新建的 socket,已存在的连接不受影响。
查看当前值
执行以下命令确认当前默认值:
sysctl net.core.wmem_default
输出类似 net.core.wmem_default = 212992,单位是字节(约 208 KB)。
临时修改(重启失效)
运行命令立即生效(需 root 权限):
sudo sysctl -w net.core.wmem_default=8388608
这里设为 8 MB(8 × 1024 × 1024)。你也可以按需设为其他值,比如 4 MB(4194304)、16 MB(16777216)等。
修改后建议同步调整最大值,避免应用调用 setsockopt(SO_SNDBUF) 时因超出限制而失败:
sudo sysctl -w net.core.wmem_max=16777216
永久生效
编辑配置文件,让设置在系统重启后依然有效:
echo "net.core.wmem_default = 8388608" | sudo tee -a /etc/sysctl.conf
echo "net.core.wmem_max = 16777216" | sudo tee -a /etc/sysctl.conf
然后加载全部配置:
sudo sysctl -p
如果只想重载刚加的项,可指定文件:sudo sysctl -p /etc/sysctl.conf。
验证是否生效
再次运行:
sysctl net.core.wmem_default net.core.wmem_max
确认输出与你设定的值一致。还可以写个简单 UDP 程序,用 getsockopt(sockfd, SOL_SOCKET, SO_SNDBUF, &val, &len) 检查新建 socket 的实际初始发送缓冲区大小(内核会自动翻倍,所以读到的值 ≈ 2×设定值)。











