记录个bbr参数

将原本为大内存优化的参数直接套用到 1GB 或 2GB-4GB 的小内存机器上,最主要的风险是 OOM (内存溢出)。在高并发或网络波动时,巨大的 TCP 缓存区会迅速吞没所有可用内存。

以下是针对不同内存容量的优化方案。


1. 核心调整逻辑

  • TCP 缓冲区 (rmem/wmem): 12GB 配置中的 64MB 最大值(67108864)对小内存太激进。每条连接都可能申请这么多内存,容易导致死机。
  • 队列与并发限制: 调低 somaxconnmax_syn_backlog,防止半连接攻击或瞬时高并发撑爆内核内存。
  • 虚拟内存: 1GB 内存必须保留一定的交换空间使用倾向,以防突发性内存请求。

方案一:1GB 内存优化配置

适用于廉价 VPS、轻量级转发、单人代理。

# --- 1. 虚拟内存 (VM) 优化 ---
# 1GB 内存较小,设为 10 或 20 均可,保留少量 swap 以防 OOM 崩溃
vm.swappiness = 20
vm.vfs_cache_pressure = 100
# 减小数量,防止内核为映射表耗费过多内存
vm.max_map_count = 65536
vm.overcommit_memory = 1

# --- 2. 文件系统优化 ---
# 1GB 内存不建议开启百万级句柄,10万足够
fs.file-max = 102400
fs.nr_open = 102400

# --- 3. 核心网络栈基础优化 ---
net.core.netdev_max_backlog = 2048
# 监听队列调小,防止并发洪峰直接耗尽内存
net.core.somaxconn = 2048
# 缓冲区最大值降至 8MB-16MB (16777216),兼顾 BBR 性能与安全
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.core.optmem_max = 32768

# --- 4. IPv4 网络协议栈专项优化 ---
net.core.default_qdisc = fq
net.ipv4.tcp_congestion_control = bbr

# TCP 读写缓冲区 (min, default, max)
# 最大值限制在 16MB 左右,防止极端情况下 OOM
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 65536 16777216

# 降低 TIME-WAIT 桶大小,节省内存空间
net.ipv4.tcp_max_tw_buckets = 32768
# 降低半连接队列
net.ipv4.tcp_max_syn_backlog = 2048

# 其他 BBR 调优保持不变(不直接消耗大量内存)
net.ipv4.tcp_slow_start_after_idle = 0
net.ipv4.tcp_notsent_lowat = 16384


方案二:2GB - 4GB 内存优化配置

适用于中型应用、个人博客、小型数据库、高性能转发。

# --- 1. 虚拟内存 (VM) 优化 ---
# 优先使用物理内存
vm.swappiness = 10
vm.vfs_cache_pressure = 80
vm.max_map_count = 131072
vm.overcommit_memory = 1

# --- 2. 文件系统优化 ---
fs.file-max = 524288
fs.nr_open = 524288

# --- 3. 核心网络栈基础优化 ---
net.core.netdev_max_backlog = 8192
net.core.somaxconn = 4096
# 缓冲区最大值调至 32MB (33554432),在 4G 内存下是安全的
net.core.rmem_max = 33554432
net.core.wmem_max = 33554432
net.core.optmem_max = 65536

# --- 4. IPv4 网络协议栈专项优化 ---
net.core.default_qdisc = fq
net.ipv4.tcp_congestion_control = bbr

# TCP 读写缓冲区
# 最大 32MB 可以支撑约 200ms 延迟下的 1Gbps 线速
net.ipv4.tcp_rmem = 4096 87380 33554432
net.ipv4.tcp_wmem = 4096 65536 33554432

# 适中规模的连接跟踪
net.ipv4.tcp_max_tw_buckets = 65536
net.ipv4.tcp_max_syn_backlog = 4096

# BBR 调优与加速参数
net.ipv4.tcp_slow_start_after_idle = 0
net.ipv4.tcp_notsent_lowat = 16384
net.ipv4.tcp_fastopen = 3


:light_bulb: 核心修改项说明对照表

参数名 1GB 建议值 2GB-4GB 建议值 修改原因说明
vm.swappiness 20 10 内存越小,越需要 Swap 垫底以防进程直接被杀。
net.core.rmem_max 16M 32M 防内存炸裂关键点。限制单个 Socket 能吞掉的最大内核内存。
tcp_rmem (max) 16M 32M 同上,控制 TCP 接收窗口上限。
tcp_max_tw_buckets 3.2万 6.5万 每一个 TW 状态都要占内存,1GB 内存不宜开太高。
somaxconn 2048 4096 限制监听队列深度,防止高并发时内核分配过多资源缓冲区。

如何生效?

将对应配置写入 /etc/sysctl.conf 后,执行以下命令:

sudo sysctl -p

如果你当前的连接数非常多,建议修改后重启服务器以彻底清理旧的缓冲区分配。

大内存机用的

# ===============================================================
# 系统性能与网络深度优化配置 (针对 12GB RAM / 高延迟高防护路径)
# ===============================================================

# --- 1. 虚拟内存 (VM) 优化 ---
# 减少交换频率,优先使用物理内存 (12GB 内存建议设为 10)
vm.swappiness = 10
# 保持更多的 VFS 缓存(对文件系统如 Seafile/Nextcloud 友好)
vm.vfs_cache_pressure = 50
# 增加内存映射区域的最大数量 (对数据库、Elasticsearch 必选)
vm.max_map_count = 262144
# 允许应用分配超过物理内存的内存
vm.overcommit_memory = 1

# --- 2. 文件系统优化 ---
# 提高最大文件句柄数
fs.file-max = 2097152
# 提高进程最大监听队列
fs.nr_open = 2097152
# 允许进程倾倒 core 文件(按需,默认可保持)
# fs.suid_dumpable = 0

# --- 3. 核心网络栈基础优化 ---
# 增加网络接口接收队列
net.core.netdev_max_backlog = 32768
# 增加最大并发连接数 (SOMAXCONN)
net.core.somaxconn = 16384
# 增加接收/发送缓冲区最大值 (64MB,应对 200ms 延迟)
net.core.rmem_max = 67108864
net.core.wmem_max = 67108864
net.core.optmem_max = 65536

# --- 4. IPv4 网络协议栈专项优化 ---
# 开启 BBR + FQ
net.core.default_qdisc = fq
net.ipv4.tcp_congestion_control = bbr

# TCP 读写缓冲区自动调优 (min, default, max)
# 针对高带宽时延乘积 (BDP),max 设为 64MB
net.ipv4.tcp_rmem = 4096 87380 67108864
net.ipv4.tcp_wmem = 4096 65536 67108864

# 开启并优化 SACK (对高重传环境至关重要)
net.ipv4.tcp_sack = 1
net.ipv4.tcp_dsack = 1
net.ipv4.tcp_fack = 1

# 禁用空闲后的慢启动 (防止流量波动后的速度归零)
net.ipv4.tcp_slow_start_after_idle = 0

# 平滑发包增益 (防止 BBR 过于激进触发 Combahton 限速)
net.ipv4.tcp_pacing_ss_ratio = 120
net.ipv4.tcp_pacing_ca_ratio = 110

# 允许更小的探测周期
net.ipv4.tcp_notsent_lowat = 16384

# 开启 MTU 探测 (应对长途路径上的 MTU 黑洞)
net.ipv4.tcp_mtu_probing = 1

# 开启 TCP Fast Open (减少握手往返延迟)
net.ipv4.tcp_fastopen = 3

# TIME-WAIT 状态重用
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_max_tw_buckets = 262144

# 提高半连接队列长度
net.ipv4.tcp_max_syn_backlog = 16384
# 减少断开连接时的 FIN-WAIT-2 存活时间
net.ipv4.tcp_fin_timeout = 20

# 开启 ECN 拥塞通知
net.ipv4.tcp_ecn = 1

# --- 5. IPv6 优化 (针对你之前的 SDN/IPv6 实验) ---
net.ipv6.conf.all.disable_ipv6 = 0
net.ipv6.conf.default.disable_ipv6 = 0
net.ipv6.conf.all.forwarding = 1
# 增加邻居表大小 (防止邻居表满导致的 IPv6 FAILED 状态)
net.ipv6.neigh.default.gc_thresh1 = 1024
net.ipv6.neigh.default.gc_thresh2 = 2048
net.ipv6.neigh.default.gc_thresh3 = 4096

# --- 6. 内核安全增强 (防 ICMP 泛洪等) ---
net.ipv4.conf.all.accept_source_route = 0
net.ipv4.conf.default.accept_source_route = 0
net.ipv4.icmp_echo_ignore_broadcasts = 1
net.ipv4.icmp_ignore_bogus_error_responses = 1