分享2个TCP调整工具,总有一款适合你的,或者只开BBR(以Ddebian为例)
在 Debian 系统中优化 TCP 网络性能是一个常见的系统管理任务,尤其对于高流量的 Web 服务器、数据库服务器、文件服务器或任何需要处理大量并发连接的应用来说至关重要。优化的核心是通过 sysctl 工具来调整内核参数。
核心原则
没有万能钥匙:最优参数取决于你的具体应用场景(例如,是高并发短连接,还是长连接大文件传输)、硬件配置和网络环境(高延迟、高带宽等)。
循序渐进:一次只修改一到两个相关参数,并进行基准测试,观察效果。不要盲目复制粘贴一堆参数。
做好备份:在修改
/etc/sysctl.conf之前,先备份一份。测试,测试,再测试:使用
iperf3,wrk,ab等工具,在调整前后进行性能测试,用数据验证你的优化效果。
修改内核参数的方法
在 Debian 中,主要通过以下两种方式修改内核参数:
临时修改(重启后失效):
sudo sysctl -w net.ipv4.tcp_syncookies=1永久修改(推荐):
将参数配置写入/etc/sysctl.conf文件或在/etc/sysctl.d/目录下创建一个新的配置文件(例如sudo nano /etc/sysctl.d/99-network-tuning.conf)。然后执行以下命令使其立即生效:sudo sysctl -p这样,每次系统启动时都会自动加载这些参数。
最重要的优化:启用 BBR 拥塞控制算法
对于现代的 Linux 内核(Debian 9 Stretch 及以后版本默认包含),启用 BBR 是最简单、最有效的网络优化手段,尤其是在有一定延迟和丢包的广域网(WAN)链路上,效果拔群。
BBR (Bottleneck Bandwidth and Round-trip propagation time) 是一种由 Google 开发的拥塞控制算法。与传统的基于丢包的算法(如 CUBIC)不同,BBR 通过主动探测网络的带宽和延迟来调整发送速率,从而在不造成拥塞的情况下更充分地利用网络带宽。
如何启用 BBR
检查内核版本:确保你的内核版本足够新(4.9+)。
uname -r # 输出应类似于 5.10.0-23-amd64 或更高修改 sysctl 配置: 创建或编辑
/etc/sysctl.d/99-bbr.conf文件,并添加以下内容:# Use BBR congestion control net.core.default_qdisc = fq net.ipv4.tcp_congestion_control = bbrnet.core.default_qdisc = fq:设置默认的包调度队列算法为fq(Fair Queue),这是 BBR 推荐的搭配。net.ipv4.tcp_congestion_control = bbr:将 TCP 拥塞控制算法设置为bbr。
加载配置:
sudo sysctl -p验证是否生效:
# 检查拥塞控制算法 sysctl net.ipv4.tcp_congestion_control # 输出应为: net.ipv4.tcp_congestion_control = bbr # 检查 BBR 模块是否加载 lsmod | grep bbr # 如果有 tcp_bbr 字样输出,则表示已成功加载
在绝大多数场景下,仅仅启用 BBR 就能带来显著的网络吞吐量提升。
深入调整:常用 TCP 参数详解
如果你想进行更精细的调优,可以考虑以下参数。这些参数通常放在一个自定义的 sysctl 配置文件中,如 /etc/sysctl.d/99-network-tuning.conf。
内存和缓冲区相关
这些参数用于调整 TCP 套接字(Socket)的读写缓冲区大小,对于高带宽网络(如万兆网络)尤其重要。
# Increase TCP max buffer size setable using setsockopt()
# 允许应用程序设置的TCP接收/发送缓冲区的最大值
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
# Increase Linux auto-tuning TCP buffer limits
# min, default, and max number of bytes to use
# TCP接收缓冲区的自动调优范围 (最小值, 默认值, 最大值)
net.ipv4.tcp_rmem = 4096 87380 16777216
# TCP发送缓冲区的自动调优范围
net.ipv4.tcp_wmem = 4096 65536 16777216
解释:增大了 TCP 缓冲区的最大值和自动调优范围。这允许单个 TCP 连接使用更多内存来缓存数据,从而在“长肥网络”(高带宽 x 高延迟)中保持高吞吐量,避免因缓冲区满而等待。