启用 Linux TCP BBR 拥塞控制算法(新版系统通用指南)
BBR(Bottleneck Bandwidth and RTT)是 Google 提出的拥塞控制算法,在有丢包的长肥管道上通常比默认的 cubic 有更高吞吐和更低排队延迟。现代主流发行版(Debian 12/13、Ubuntu 22.04/24.04、RHEL/Rocky 9)内核均已自带,无需更换内核。
一、确认内核支持
执行以下命令检查内核是否原生支持 BBR 算法:
sysctl net.ipv4.tcp_available_congestion_control输出内容中包含 bbr 即代表内核具备支持能力:
net.ipv4.tcp_available_congestion_control = reno cubic bbr注意:这条命令仅说明内核支持 BBR,不代表已经启用,不能作为最终成功判断依据。
二、写入持久化配置
新版 systemd 系统开机仅扫描 /etc/sysctl.d、/run/sysctl.d、/usr/local/lib/sysctl.d、/usr/lib/sysctl.d 四个目录,不再读取 /etc/sysctl.conf。
Debian 13 起已取消该文件的兼容软链接,若写入 /etc/sysctl.conf,只会临时生效,重启后会静默退回默认的 cubic 算法。因此必须在 sysctl.d 目录下新建专属配置文件。
cat > /etc/sysctl.d/99-bbr.conf <<'EOF'
net.core.default_qdisc=fq
net.ipv4.tcp_congestion_control=bbr
EOF
sysctl --system三、验证是否成功启用
最可靠的验证方式是直接查看当前系统生效的内核参数:
sysctl net.ipv4.tcp_congestion_control
sysctl net.core.default_qdisc正常输出结果:
net.ipv4.tcp_congestion_control = bbr
net.core.default_qdisc = fq可选:查看 BBR 模块引用状态
lsmod | grep bbr重要说明:部分系统内核将 BBR 编译为内建模式,并非独立模块,此时 lsmod 查询无输出属于正常现象。最终生效结果以 sysctl 参数为准,而非模块查询结果。
四、立即为现有网卡切换 FQ 队列(可选)
default_qdisc 配置仅对后续新建的网络队列生效,服务器当前正在运行的网卡,仍会沿用开机默认的 fq\_codel 队列。如需立即生效,可手动替换网卡根队列。
首先查看本机所有网卡名称:
ip -o link show | awk -F': ' '{print $2}'替换为你的实际网卡名(示例为 ens17)执行切换命令:
tc qdisc replace dev ens17 root fq温馨提示:在活跃 SSH 连接网卡上执行通常无感知,但该操作涉及网卡根队列变更,建议保留备用登录方式。若不手动操作,重启服务器后会自动生效 FQ 队列,不影响 BBR 核心功能。
五、恢复系统默认配置(关闭 BBR)
仅删除配置文件无法自动回滚内核参数,需手动重置,完整回滚命令如下:
rm /etc/sysctl.d/99-bbr.conf
sysctl -w net.ipv4.tcp_congestion_control=cubic
sysctl --system说明:default_qdisc 会被系统默认配置自动恢复为 fq\_codel,无需手动设置;而 tcp_congestion_control 无系统默认兜底配置,必须手动显式恢复。
六、补充说明
- BBR 启用后对全站所有 TCP 连接自动生效,无需修改任何应用程序配置;
- 性能收益主要体现在跨境链路、高带宽公网服务、存在轻微丢包的网络环境,同机房低延迟内网场景提升有限;
- 共享带宽链路环境中,BBR 抢占性较强,可能挤压其他连接带宽,建议业务实测后再规模化部署;
- 全文已在 Debian 13 实测复现,适配 Ubuntu 22.04+、Rocky 9、RHEL 9 等新版 Linux 发行版。
评论区(暂无评论)