Linux 开启 BBR 常见问题排查:没有 bbr、权限不足、重启失效怎么办
更新日期:2026-07-07
BBR 的配置命令很短,但实际环境里经常会遇到权限、内核、容器和验证方式的问题。下面按现象排查。
available_congestion_control 里没有 bbr
先检查:
uname -r
sysctl net.ipv4.tcp_available_congestion_control
find /lib/modules/$(uname -r) -name 'tcp_bbr*' 2>/dev/null
可能原因:
- 内核太老。
- 当前内核没有编译 tcp_bbr。
- 云厂商安全镜像裁剪了模块。
- 容器内看不到宿主机模块。
优先升级到发行版官方支持内核,不要随便安装来路不明的一键内核。
sysctl: permission denied
这通常说明你没有权限修改内核参数。常见于:
- 非 root 用户没有 sudo。
- LXC / OpenVZ 容器受宿主机限制。
- Kubernetes 容器没有开放对应 sysctl。
如果是容器,应该在宿主机配置 BBR,而不是在容器里反复尝试。
重启后失效
只执行 `sysctl -w` 是临时修改。请写入:
sudo tee /etc/sysctl.d/99-bbr.conf >/dev/null <<'EOF'
net.core.default_qdisc=fq
net.ipv4.tcp_congestion_control=bbr
EOF
sudo sysctl --system
确认文件名以 `.conf` 结尾。
ss 看不到 bbr
ss -tin state established | grep bbr
没有输出不一定失败。可能只是当前没有活跃 TCP 连接,或者连接是在切换算法之前建立的。重新建立连接再看。
tc qdisc show 显示 mq
多队列网卡常见 `mq`。先看:
sysctl net.core.default_qdisc
如果已经是 fq,通常没问题。需要更细时再检查具体网卡子队列。
开启后反而变慢
先回滚验证:
sudo sysctl -w net.ipv4.tcp_congestion_control=cubic
如果 Cubic 更稳定,说明你的场景可能不适合 BBR,或者瓶颈不在 TCP 拥塞控制。低延迟内网、数据库连接、企业专线不一定需要 BBR。