启用 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 发行版。