Linux 如何确认 BBR 已经开启:sysctl、ss、tc 三种验证方式

July 7, 2026
开启 TCP BBR 后如何确认真的生效?这篇文章整理 sysctl、ss、tc 三种检查方式,以及常见误判和排查步骤。

Linux 如何确认 BBR 已经开启:sysctl、ss、tc 三种验证方式

更新日期:2026-07-07

很多教程执行完 BBR 命令后,只看一眼 `sysctl net.ipv4.tcp_congestion_control` 就结束了。实际上,BBR 是否“配置成功”、是否“新连接正在使用”、队列算法是否合理,是三个不同层面的事情。建议按下面顺序检查。

1. 看内核是否支持 BBR

sysctl net.ipv4.tcp_available_congestion_control

如果输出里有 `bbr`,说明当前内核可用。如果没有,先尝试加载模块:

sudo modprobe tcp_bbr 2>/dev/null || true
sysctl net.ipv4.tcp_available_congestion_control

仍然没有时,通常是内核太老、模块被裁剪、容器受限,或者你正在使用云厂商特殊内核。

2. 看默认拥塞控制算法

sysctl net.ipv4.tcp_congestion_control

期望输出:

net.ipv4.tcp_congestion_control = bbr

这个结果代表“之后新建的 TCP 连接默认会用 BBR”。已经建立的旧连接不一定马上切换。

3. 看默认队列算法

sysctl net.core.default_qdisc

建议输出为:

net.core.default_qdisc = fq

如果 `tc qdisc show` 里看到 `mq`,不一定是错。多队列网卡常见 mq,关键还是 `net.core.default_qdisc` 和实际子队列。

4. 看正在使用 BBR 的连接

先建立一个活跃外连连接,例如下载文件或访问你的站点,然后执行:

ss -tin state established | grep -m 5 bbr

如果没有输出,可能是:

  • 当前没有活跃 TCP 连接。
  • 连接建立在你切换 BBR 之前。
  • 业务瓶颈不在 TCP 发送端。
  • 容器内看到的不是宿主机实际网络栈。

推荐检查脚本

echo "== Kernel =="
uname -r

echo "== Available congestion control =="
sysctl net.ipv4.tcp_available_congestion_control

echo "== Current congestion control =="
sysctl net.ipv4.tcp_congestion_control

echo "== Default qdisc =="
sysctl net.core.default_qdisc

echo "== Active BBR connections =="
ss -tin state established | grep -m 5 bbr || true

继续阅读