注意:必须是root用户,请使用sudo -i或在命令前添加sudo提权
查看当前的 net.ipv4.tcp_wmem 参数值(最好记录一下)
sysctl net.ipv4.tcp_wmem
查询当前使用的 TCP 拥塞控制算法
sysctl net.ipv4.tcp_congestion_control
查看当前的队列管理算法
tc qdisc show
如未启用bbr+fq,请使用以下命令开启
echo "net.ipv4.tcp_congestion_control=bbr" >> /etc/sysctl.conf
echo "net.core.default_qdisc=fq" >> /etc/sysctl.conf
sysctl -p
服务端Linux安装iperf3
在Debian/Ubuntu系统上安装
apt update
apt install iperf3
在CentOS/RHEL系统上安装
yum install epel-release
yum install iperf3
在Fedora系统上安装
dnf install iperf3
防火墙放行端口 (这里以ufw为例,如果你没有开启防火墙可略过这一步)
ufw allow 5201
服务端启动iperf3
iperf3 -s
你本地Windows机器安装iperf3(下载链接)
在windows打开CMD运行:
iperf3 -c 服务端IP -R -t 30
测试开始:
初次测试观察重传丢包情况:
计算新的参数: BDP = 客户机与服务器两边的最低带宽Mpbps * 1000 * 1000 * 客户机到服务器的延迟(单位:秒) / 8
举例:客户机器200M,服务器1000M,两者延迟180ms,那么计算值就是:200*1000*1000*0.18/8 = 4500000
带宽BDP值计算器1
带宽BDP值计算器2
延迟=你本地到服务器的延迟,或者你的目标客户到服务器的平均延迟
sysctl -w net.ipv4.tcp_wmem="4096 16384 计算出来地BDP值"
sysctl -w net.ipv4.tcp_rmem="4096 87380 同上"
应用新的值之后,再进行测试。
调整逻辑:
如果测试结果0重传或者个位数重传,可适当调大TCP缓冲区的最大值,比如上调2~4MiB;
如果测得的重传数较高,则需下调1~2MiB再进行测试;
0重传则上调,高重传则下调,如此反复,直到测速刚刚好能实现0重传或低重传 (100以内),在此基础上再下调0.5MiB或1MiB追求稳定,防止因网络高峰期而再度出现高重传。
优化目的:Retr为0,同时带宽能够跑到最大
注意:如果手动调整的wmem和rmem值无法减少Retr,就直接调整为自动自动调整值,代码如下。
echo "net.ipv4.tcp_moderate_rcvbuf = 1" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
大致流程:
调整为理论值后用iperf3测速发现0重传,执行下列命令(上调2~5MiB)
sysctl -w net.ipv4.tcp_wmem="4096 16384 理论值+3MiB"
sysctl -w net.ipv4.tcp_rmem="4096 87380 理论值+3MiB"
再次用iperf3测速发现高重传,执行下列命令(下调1~2MiB)
sysctl -w net.ipv4.tcp_wmem="4096 16384 理论值+2MiB"
sysctl -w net.ipv4.tcp_rmem="4096 87380 理论值+2MiB"
用iperf3测速发现0重传,这次可上调0.5MiB测试,发现恰好0重传,写入sysctl.conf
编辑系统内核文件
nano /etc/sysctl.conf
在文件中添加如下
net.ipv4.tcp_wmem = 4096 16384 你所测得的值
net.ipv4.tcp_rmem = 4096 87380 同上
保存并退出
Ctrl+o+Enter(回车)
Ctrl+x
使更改生效
sysctl -p
优化前:
优化后: