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