将原本为大内存优化的参数直接套用到 1GB 或 2GB-4GB 的小内存机器上,最主要的风险是 OOM (内存溢出)。在高并发或网络波动时,巨大的 TCP 缓存区会迅速吞没所有可用内存。
以下是针对不同内存容量的优化方案。
1. 核心调整逻辑
- TCP 缓冲区 (rmem/wmem): 12GB 配置中的 64MB 最大值(67108864)对小内存太激进。每条连接都可能申请这么多内存,容易导致死机。
- 队列与并发限制: 调低
somaxconn和max_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
核心修改项说明对照表
| 参数名 | 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
如果你当前的连接数非常多,建议修改后重启服务器以彻底清理旧的缓冲区分配。