使用iperf3对服务器进行TCP调整优化—减少丢包和0重传

注意:必须是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,同时带宽能够跑到最大

大致流程:
调整为理论值后用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

 

优化前:

优化后:

发表评论