关于FQ的一些自己的BBR优化

记录一下自己长久以来测试,已经在系统上优化的笔记,以防下次又要从新不断摸索配置

  • 系统: debian9 minimal
  • 加速方案: BBR plus
  1. 安装BBR

PS:(这个就不多说了,网上搜索一大堆,也有一大堆的一键脚本)

  1. 修改
1
vim /etc/sysctl.conf

增加以下内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
# 系统所有进程一共可以打开的文件数量, 每个套接字也占用一个文件描述字
fs.file-max = 1491124
# 增大内核 backlog 参数,使得系统能够保持更多的尚未完成 TCP 三次握手的套接字
net.ipv4.tcp_max_syn_backlog = 1048576
net.core.netdev_max_backlog = 1048576
net.core.somaxconn = 1048576
# 系统中最多有多少个 TCP 套接字不被关联到任何一个用户文件句柄上
net.ipv4.tcp_max_orphans = 131072
# 系统同时保持TIME_WAIT套接字的最大数目,http 短链接会产生很多 TIME_WAIT 套接字。
net.ipv4.tcp_max_tw_buckets = 7000
# 缩短套接字处于 TIME_WAIT 的时间
net.ipv4.tcp_fin_timeout = 30
# 启用 TIME_WAIT 复用,使得结束 TIEM_WAIT 状态的套接字的端口可以立刻被其他套接字使用。
net.ipv4.tcp_tw_reuse = 1
# 减小 tcp keepalive 探测次数,可以即时释放长链接
net.ipv4.tcp_keepalive_probes = 3
# 缩短 tcp keepalive 探测间隔时间,同上
net.ipv4.tcp_keepalive_intvl = 15
# 修改 tcp keepalive 默认超时时间
net.ipv4.tcp_keepalive_time = 7200
# 路由缓存刷新频率,当一个路由失败后多长时间跳到另一个路由,默认是300。
net.ipv4.route.gc_timeout = 100
# 在内核放弃建立连接之前发送SYN包的数量。
net.ipv4.tcp_syn_retries = 1
# syn-ack握手状态重试次数,默认5,免遭受syn-flood攻击改为1或2
net.ipv4.tcp_synack_retries = 1
# 开启TCP时间戳
# 以一种比重发超时更精确的方法(请参阅 RFC 1323)来启用对 RTT 的计算;为了实现更好的性能应该启用这个选项。
net.ipv4.tcp_timestamps = 0
# 启用ip转发功能
net.ipv4.ip_forward = 1
# 启用 tcp fast open
net.ipv4.tcp_fastopen = 3
# 关闭慢启动重启(Slow-Start Restart), SS/SSR 对于会出现突发空闲的长周期 TLS 连接有很大的负面影响
net.ipv4.tcp_slow_start_after_idle = 0
# 启用 MTU 探测,在链路上存在 ICMP 黑洞时候有用
net.ipv4.tcp_mtu_probing = 1
# 打开内核的 SYN Cookie 功能,可以防止部分 DOS 攻击
net.ipv4.tcp_syncookies = 1
# 当某个节点可用内存不足时, 系统会倾向于从其他节点分配内存。对 Mongo/Redis 类 cache 服务器友好
vm.zone_reclaim_mode = 0
# 当内存使用率不足10%(默认值60%)时使用 swap,尽量避免使用 swap,减少唤醒软中断进程
vm.swappiness = 10
# 内核执行无内存过量使用处理。使用这个设置会增大内存超载的可能性,但也可以增强大量使用内存任务 Mongo/Redis 的性能
vm.overcommit_memory = 1

增加初始拥塞窗口和滑动窗口

1
2
ip route show
ip route change default via 10.0.1.1 dev eth0 proto static initcwnd 120

这里是10.0.1.1是根据ip route show里获取到的第一行

1
2
default via 10.0.1.1 dev eth0 onlink
10.0.0.0/21 dev eth0 proto kernel scope link src 10.0.***.***