logo NodeSeekbeta

记录启用bbr3的步骤

因为有小鸡的丢包和延迟情况,整理了下启用bbr3的步骤。适合1-2G和4G内存(自行替换缓冲区内容)
我的配置是开启swap,为内存的1:1大小。
我使用这个项目构建bbr3原版内核。

1. 选择CloudPassenger/Cloud-Kernel-BBRv3

项目地址:https://github.com/CloudPassenger/Cloud-Kernel-BBRv3
提供集成增强功能的 Debian 内核自动构建:

使用 Linux Kernel 官方 6.12 源码 (来自 kernel.org)

集成 Debian 内核团队维护的补丁 (来自 kernel-team/linux)

原版的 BBRv1 降级重命名为了 bbr1

2. 与bbr1的区别

  • net.ipv4.tcp_ecn = 1:6.12 内核对 ECN(显式拥塞通知)的处理机制非常成熟。BBRv3 相比 v1 最大的进步就是能听懂 ECN 信号,开启它能极大缓解晚高峰网络拥堵时的延迟跳动。
  • net.ipv4.tcp_mtu_probing = 1:有效防止路径 MTU 导致的黑洞丢包,保障 BBRv3 发包速率计算的精准度。

3. 安装后验证是否生效

查看当前算法:

sysctl net.ipv4.tcp_congestion_control

应该输出bbr

modinfo tcp_bbr

应该看到version 3

4. 安装步骤 我把命令在代码块末尾连在一起了

wget https://raw.githubusercontent.com/CloudPassenger/Cloud-Kernel-BBRv3/main/install-kernel.sh && \
chmod +x install-kernel.sh && ./install-kernel.sh

选语言后选0,即最新版即可

启用bbr3的sysctl优化配置--适合1-2G物理内存

cat >> /etc/sysctl.d/99-bbr3.conf << EOF
# ==========================================
# 1-2GB 小内存服务器专属优化 (适配 Cloud-Kernel-BBRv3)
# ==========================================

# --- 1. 虚拟内存 (VM) 优化 ---
# 小内存防 OOM 策略:适当利用 Swap,积极回收缓存
vm.swappiness = 20
vm.vfs_cache_pressure = 100
vm.max_map_count = 131072
vm.overcommit_memory = 1

# --- 2. 文件系统优化 ---
fs.file-max = 524288
fs.nr_open = 524288

# --- 3. 核心网络栈基础优化 ---
net.core.netdev_max_backlog = 8192
net.core.somaxconn = 4096
# 【核心下调】缓冲区最大值设为 16MB (16777216),兼顾千兆网速与内存安全
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.core.optmem_max = 65536

# --- 4. IPv4 网络协议栈专项优化 ---
net.core.default_qdisc = fq

# 此内核下 bbr 即代表 BBRv3
net.ipv4.tcp_congestion_control = bbr 

# 开启 ECN 与 MTU 探测 (BBRv3 必备)
net.ipv4.tcp_ecn = 1
net.ipv4.tcp_mtu_probing = 1

# 【核心下调】TCP 读写缓冲区最大 16MB
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 65536 16777216

# 【核心下调】缩减僵尸连接的内存占用
net.ipv4.tcp_max_tw_buckets = 32768
net.ipv4.tcp_max_syn_backlog = 4096

# BBR 调优与加速参数
net.ipv4.tcp_slow_start_after_idle = 0
net.ipv4.tcp_notsent_lowat = 16384
net.ipv4.tcp_fastopen = 3
EOF
sudo sysctl --system && sudo modinfo tcp_bbr

如果你有4G内存
用下面的替换上面的第3部分缓冲区部分

# --- 3. 核心网络栈基础优化 ---
net.core.netdev_max_backlog = 8192
net.core.somaxconn = 4096
# 缓冲区最大值调至 32MB (33554432),在 4G 内存下是安全的
net.core.rmem_max = 33554432
net.core.wmem_max = 33554432
net.core.optmem_max = 65536

补充update

先看下内核 uname -r 如果是6.12.xx 说明是debian13的LTS 那步骤没问题。
而如果是最新的7.1.2说明已经内置了最新的bbr3支持。
modinfo tcp_bbr看不到version3,只显示如下
(7.1.2才发布一周,我大概是搞其他编译把这个装上了才发现😄,一般都是6.12.xx)

name:           tcp_bbr
filename:       (builtin)
description:    TCP BBR (Bottleneck Bandwidth and RTT)
  • mark

  • 牛的兄弟,感谢你的@和分享

  • 都出3了啊 ac01

  • 这个内核和XanMod内核哪个好,好像有些bbr3是用XanMod内核

  • @duguanjun #4 Xanmod也是贡献者 但他家源总是有点小问题--可能因为他家用最新的内核,我想起来我其中一个小鸡就是先安装xanmod,所以内核升到了7.1.2。
    这个脚本适配6.12
    5vIkMehL48uEdp5QcOSq5VX4WwoGlyhi.webp

  • 如果你的系统保持了最新 还有个问题导致启动后仍然是官方内核 查看modinfo tcp_bbr不显示version 3。因为debian启动时选择了由官方签名的优先。

    当系统中同时存在两个版本号极其相近的内核时,GRUB 会调用 Debian 底层的 dpkg --compare-versions 来一决高下。你可以看看这两个名字:

    • 你的 BBRv3 内核:6.12.94
    • Debian 官方内核:6.12.94+deb13-amd64

    在 Linux 的字符串比对规则里,带有额外后缀(+deb13)的版本,会被判定为比纯数字(6.12.94)更新、更高级的版本。 这就导致了“反客为主”的局面:你的 BBRv3 内核虽然是后安装的,但在系统重启时,默认选择了一个带有 Debian 官方签名的内核。
    新安装的6.12.94反而比自带的官方内核要低,所以被挤到了第二顺位。

    1. 提取 GRUB 菜单的确切名称
    运行以下命令,它会帮你列出 GRUB 菜单里的所有启动项:

    awk -F\' '/menuentry / {print $2}' /boot/grub/grub.cfg
    
    

    输出中通常会有一个主菜单叫 Debian GNU/Linux,还有一个叫 Advanced options for Debian GNU/Linux。在 Advanced 选项下,会包含你的 Debian GNU/Linux, with Linux 6.12.94

    2. 修改默认项
    打开 GRUB 配置文件:

    nano /etc/default/grub
    
    

    找到 GRUB_DEFAULT=0 这一行。你需要将它修改为指向你的 BBRv3 内核。如果你的 BBRv3 内核在“高级选项 (Advanced options)”里,语法通常是 主菜单>子菜单 的形式(注意大小写和空格,必须和第一步提取出的名字一字不差),例如:

    GRUB_DEFAULT="Advanced options for Debian GNU/Linux>Debian GNU/Linux, with Linux 6.12.94"
    
    

    3. 更新引导并重启

    update-grub
    reboot
    
    

    ** 4. 收尾 最好把原来官方的卸载 保持干净

    apt autoremove --purge linux-image-6.12.94+deb13-amd64
    
  • 明天起来试一下,谢谢分享

  • 谢谢分享

你好啊,陌生人!

我的朋友,看起来你是新来的,如果想参与到讨论中,点击下面的按钮!

📈用户数目📈

目前论坛共有63125位seeker

🎉欢迎新用户🎉