TCP调优用的我之前的方法
初始化/etc/sysctl.conf配置
cat > /etc/sysctl.conf << EOF
# TCP优化配置(适用于代理服务器)
# 设置默认队列纪律为fq
net.core.default_qdisc=fq
# 使用BBR拥塞控制算法,提升吞吐量
net.ipv4.tcp_congestion_control=bbr
# TCP接收和发送缓冲区
net.ipv4.tcp_rmem=8192 131072 16777216
net.ipv4.tcp_wmem=4096 65536 16777216
# 增加SYN队列长度,应对高并发
net.ipv4.tcp_max_syn_backlog=4096
# 启用SYN cookies,防止SYN洪水攻击
net.ipv4.tcp_syncookies=1
# 设置keepalive,释放不活跃连接
net.ipv4.tcp_keepalive_time=600 # 空闲600秒后探测
net.ipv4.tcp_keepalive_intvl=60 # 探测间隔60秒
net.ipv4.tcp_keepalive_probes=5 # 探测5次后关闭
# 缩短FIN_WAIT_2超时时间
net.ipv4.tcp_fin_timeout=30
# 启用TIME_WAIT连接重用和快速回收
net.ipv4.tcp_tw_reuse=1
net.ipv4.tcp_tw_recycle=1
# 启用窗口缩放,优化高带宽延迟网络
net.ipv4.tcp_window_scaling=1
# 启用SACK、DSACK和FACK,提升丢包性能
net.ipv4.tcp_sack=1
net.ipv4.tcp_dsack=1
net.ipv4.tcp_fack=1
# 启用MTU探测,避免IP分片
net.ipv4.tcp_mtu_probing=1
# 禁用慢启动重启,加速恢复
net.ipv4.tcp_slow_start_after_idle=0
# 设置TCP内存阈值(单位:页面,通常4KB)
net.ipv4.tcp_mem=786432 1048576 1572864
# 设置TIME_WAIT最大连接数
net.ipv4.tcp_max_tw_buckets=200000
# 设置孤立套接字最大数量
net.ipv4.tcp_max_orphans=262144
# 设置SYN和ACK重传次数
net.ipv4.tcp_syn_retries=3
net.ipv4.tcp_retries2=5
# 启用快速重传和恢复
net.ipv4.tcp_frto=2
# 启用时间戳,提升RTT估计
net.ipv4.tcp_timestamps=1
# 启用低延迟模式
net.ipv4.tcp_low_latency=1
# 启用ECN,优化拥塞处理
net.ipv4.tcp_ecn=1
# 设置缓冲区最大值
net.core.rmem_max=16777216
net.core.wmem_max=16777216
# 设置listen队列长度
net.core.somaxconn=4096
# 设置网络设备接收队列最大包数
net.core.netdev_max_backlog=30000
# 设置初始拥塞窗口和接收窗口
net.ipv4.tcp_init_cwnd=10
net.ipv4.tcp_init_rwnd=10
# 启用TCP Fast Open,加速连接
net.ipv4.tcp_fastopen=1
# 设置本地端口范围
net.ipv4.ip_local_port_range=1024 65535
EOF
sysctl -p && sysctl --system
创建BlackSheep大佬第二种调优方法的懒人脚本
TARGET_DIR="/app/tcp"; SCRIPT_NAME="setup_traffic_control.sh"; CONFIG_FILE="/app/tcp/bandwidth.conf"; mkdir -p $TARGET_DIR && touch $CONFIG_FILE && echo '#!/bin/bash' > $TARGET_DIR/$SCRIPT_NAME && cat <<EOF >> $TARGET_DIR/$SCRIPT_NAME && chmod +x $TARGET_DIR/$SCRIPT_NAME
# 获取第一个以太网接口名称
INTERFACE=\$(ip -o link show | grep 'link/ether' | awk -F': ' '{print \$2}' | head -n 1)
echo "网络接口名称: \$INTERFACE"
# 检查参数
if [ "\$1" != "-y" ] && [ "\$1" != "-n" ]; then
echo "无效的参数。请使用 -y 或 -n。"
exit 1
fi
# 系统自动执行或用户执行
if [ "\$1" = "-n" ]; then
# 系统自动执行,从配置文件中读取带宽值
if [ -f "/app/tcp/bandwidth.conf" ]; then
source /app/tcp/bandwidth.conf
else
echo "配置文件 /app/tcp/bandwidth.conf 不存在,请手动执行脚本并输入带宽值。"
exit 1
fi
elif [ "\$1" = "-y" ]; then
# 用户执行,交互式输入带宽值
read -e -p "请输入瓶颈带宽值 (单位 Mbit/s): " BANDWIDTH
echo "瓶颈带宽值: \$BANDWIDTH Mbit/s"
# 保存带宽值到配置文件
echo "BANDWIDTH=\$BANDWIDTH" > /app/tcp/bandwidth.conf
fi
# 检查变量是否为空
if [ -z "\$INTERFACE" ] || [ -z "\$BANDWIDTH" ]; then
echo "网络接口名称或瓶颈带宽值不能为空,请重新输入。"
exit 1
fi
# 删除现有的队列调度
echo "正在删除现有队列调度..."
tc qdisc del dev \$INTERFACE root 2>/dev/null || true
# 添加 htb 队列调度
echo "正在添加 HTB 队列调度..."
tc qdisc add dev \$INTERFACE root handle 1:0 htb default 10
# 对所有源IP进行限速
echo "正在设置所有源IP的带宽限制..."
tc class add dev \$INTERFACE parent 1:0 classid 1:1 htb rate \${BANDWIDTH}mbit ceil \${BANDWIDTH}mbit
tc filter add dev \$INTERFACE protocol ip parent 1:0 prio 1 u32 match ip src 0.0.0.0/0 flowid 1:1
# 对所有目的IP进行限速
echo "正在设置所有目的IP的带宽限制..."
tc class add dev \$INTERFACE parent 1:0 classid 1:2 htb rate \${BANDWIDTH}mbit ceil \${BANDWIDTH}mbit
tc filter add dev \$INTERFACE protocol ip parent 1:0 prio 1 u32 match ip dst 0.0.0.0/0 flowid 1:2
# 查看配置是否生效
echo "显示当前配置..."
tc qdisc show dev \$INTERFACE
tc class show dev \$INTERFACE
tc -s filter show dev \$INTERFACE
EOF
为了开机自启加了个脚本参数
使用-y参数需要手动输入瓶颈宽带值 调整参数也执行该命令
/app/tcp/setup_traffic_control.sh -y
脚本执行后会将上次输入的瓶颈宽带值记录至配置文件,所以输入-n参数就是为了后续重启机器后自动执行脚本用的,当然你也可以手动执行会加载你上次输入的瓶颈宽带值
/app/tcp/setup_traffic_control.sh -n
—
开机自启我用的系统服务
创建系统服务
cat << EOF > /etc/systemd/system/tcp_traffic_control.service
[Unit]
Description=TCP Traffic Control Setup
After=network.target
[Service]
Type=oneshot
ExecStart=/app/tcp/setup_traffic_control.sh -n
RemainAfterExit=true
[Install]
WantedBy=multi-user.target
EOF
### 加载系统服务
sudo systemctl daemon-reload
### 启用服务
systemctl enable tcp_traffic_control.service