[Debian Ubuntu]最新合并第二版多并发网络优化脚本-有用记得回来加鸡腿 1

第一个版本优化过了.并不适合所有配置的机器.经过两天和大佬们的学习.现在放出第二版
原第一版脚本:https://github.com/xsmzdd/Multiple-concurrent-network-optimization/blob/main/debian_optimization.sh

第二版:
基于xanmod 内核,第一版就是没有选定内核,不够严谨
1.下载安装xanmod 内核
不卸载内核版本

wget -O tcpx.sh "https://github.com/ylx2016/Linux-NetSpeed/raw/master/tcpx.sh" && chmod  x tcpx.sh && ./tcpx.sh

卸载内核版本

wget -O tcp.sh "https://github.com/ylx2016/Linux-NetSpeed/raw/master/tcp.sh" && chmod  x tcp.sh && ./tcp.sh 

xanmod官方MAIN版本默认为BBR3(替换了原来的BBR),仅支持Debian/Ubuntu 查询当前bbr cat /sys/module/tcp_bbr/version 或者 modinfo tcp_bbr

XANMOD – 当前为最新LTS内核(不再维护,停更,官方版本不改) 只保留不卸载的官方编译版本
BBR2合并到XANMOD

2.运行

Debian:

wget -O - https://raw.githubusercontent.com/xsmzdd/Multiple-concurrent-network-optimization/main/Optimization-2.sh | bash

Ubuntu:

wget https://raw.githubusercontent.com/xsmzdd/Multiple-concurrent-network-optimization/main/U-Optimization-2.sh -O U-Optimization-2.sh && chmod  x U-Optimization-2.sh && ./U-Optimization-2.sh

脚本内容:

#!/bin/bash

# 更新系统
apt update && apt upgrade -y

# 检测是否安装iptables,如果没有则安装
if ! command -v iptables &> /dev/null; then
    echo "安装 iptables..."
    apt install -y iptables
fi

# 获取所有网络接口的名称
interfaces=$(nmcli device status | awk '{print $1}' | grep -v DEVICE)

# 循环遍历每个网络接口
for interface in $interfaces; do
    # 使用nmcli增加环缓冲的大小
    echo "Setting ring buffer size for interface $interface..."
    sudo nmcli connection modify $interface txqueuelen 10000

    # 调优网络设备积压队列以避免数据包丢弃
    echo "Tuning network device backlog for interface $interface..."
    sudo nmcli connection modify $interface rxqueuelen 10000

    # 增加NIC的传输队列长度
    echo "Increasing NIC transmission queue length for interface $interface..."
    sudo nmcli connection modify $interface transmit-hash-policy layer2 3
done

# 备份原始配置文件
cp /etc/sysctl.conf /etc/sysctl.conf.bak

# 配置内核参数
cat < /etc/sysctl.conf
# 网络调优: 基本
# 启用 TCP 时间戳
net.ipv4.tcp_timestamps=1

# 网络调优: 内核 Backlog 队列和缓存相关
# 设置默认的发送和接收缓冲区大小
net.core.wmem_default=16384
net.core.rmem_default=262144
# 设置最大的发送和接收缓冲区大小
net.core.rmem_max=536870912
net.core.wmem_max=536870912
# 设置 TCP 的接收和发送缓冲区大小
net.ipv4.tcp_rmem=8192 262144 536870912
net.ipv4.tcp_wmem=4096 16384 536870912
# 禁用 TCP 自动调整窗口大小
net.ipv4.tcp_adv_win_scale=-2
# TCP 协议将最大数据包缩小为最小数据包的上限
net.ipv4.tcp_collapse_max_bytes=6291456
# TCP 发送队列满时,内核会将套接字标记为可写入的下限
net.ipv4.tcp_notsent_lowat=131072
# 设置网络设备接收队列的最大长度
net.core.netdev_max_backlog=10240
# 设置 TCP SYN 队列的最大长度
net.ipv4.tcp_max_syn_backlog=10240
# 设置系统同时保持 SYN_RECV 状态的最大连接数
net.core.somaxconn=8192
# 当连接数达到上限时丢弃新的连接
net.ipv4.tcp_abort_on_overflow=1
# 设置默认的网络队列调度器为 FQ
net.core.default_qdisc=fq
# 启用 TCP 窗口缩放选项
net.ipv4.tcp_window_scaling=1
# 关闭空闲连接的慢启动
net.ipv4.tcp_slow_start_after_idle=0

# 网络调优: 其他
# 启用 SACK 和 FACK 选项
net.ipv4.tcp_sack=1
net.ipv4.tcp_fack=1
# 设置 TCP SYN 连接的重试次数
net.ipv4.tcp_syn_retries=3
net.ipv4.tcp_synack_retries=3
# 设置 TCP SYN 连接超时重试时间
net.ipv4.tcp_retries2=5
# 禁用 SYN 洪水攻击保护
net.ipv4.tcp_syncookies=0
# 设置反向路径过滤
net.ipv4.conf.default.rp_filter=2
net.ipv4.conf.all.rp_filter=2
# 设置 TCP FIN 连接的超时时间
net.ipv4.tcp_fin_timeout=10
# 禁用保存 TCP 连接信息
net.ipv4.tcp_no_metrics_save=1
# 设置 UNIX 套接字的最大队列长度
net.unix.max_dgram_qlen=1024
# 设置路由缓存刷新频率
net.ipv4.route.gc_timeout=100
# 启用 MTU 探测
net.ipv4.tcp_mtu_probing=1
# 启用并记录欺骗、源路由和重定向包
net.ipv4.conf.all.log_martians=1
net.ipv4.conf.default.log_martians=1
# 禁用接受源路由的包
net.ipv4.conf.all.accept_source_route=0
net.ipv4.conf.default.accept_source_route=0
# 配置 TCP KeepAlive
net.ipv4.tcp_keepalive_time=300
net.ipv4.tcp_keepalive_probes=2
net.ipv4.tcp_keepalive_intvl=2
# 设置系统所能处理不属于任何进程的 TCP sockets 最大数量
net.ipv4.tcp_max_orphans=262144
# ARP 表的缓存限制优化
net.ipv4.neigh.default.gc_thresh1=128
net.ipv4.neigh.default.gc_thresh2=512
net.ipv4.neigh.default.gc_thresh3=4096
net.ipv4.neigh.default.gc_stale_time=120
# ARP 报文的发送规则
net.ipv4.conf.default.arp_announce=2
net.ipv4.conf.lo.arp_announce=2
net.ipv4.conf.all.arp_announce=2

# 内核调优
# 系统 Panic 后 1 秒自动重启
kernel.panic=1
# 允许更多的 PID
kernel.pid_max=32768
# 内核允许的最大共享内存段的大小
kernel.shmmax=4294967296
# 在任何给定时刻,系统上可以使用的共享内存的总量
kernel.shmall=1073741824
# 设置程序 core dump 时生成的文件名格式
kernel.core_pattern=core_%e
# 当发生 OOM 时,自动触发系统 Panic
vm.panic_on_oom=1
# 决定系统回收内存时对文件系统缓存的倾向程度
vm.vfs_cache_pressure=250
# 决定系统进行交换行为的程度
vm.swappiness=10
# 设置系统 dirty 内存的比例
vm.dirty_ratio=10
# 控制内存过量分配
vm.overcommit_memory=1
# 增加系统文件描述符限制
fs.file-max=1048575
fs.inotify.max_user_instances=8192
# 决定是否开启内核响应魔术键
kernel.sysrq=1
# 控制内存回收机制
vm.zone_reclaim_mode=0
EOF

# 应用新的内核参数
sysctl -p

# 更新 grub
update-grub


# 调整网络队列处理算法(Qdiscs),优化TCP重传次数
for interface in $interfaces; do
    echo "Tuning network queue disciplines (Qdiscs) and TCP retransmission for interface $interface..."
    sudo tc qdisc add dev $interface root fq
    sudo tc qdisc change dev $interface root fq maxrate 90mbit
    sudo tc qdisc change dev $interface root fq burst 15k
    sudo tc qdisc add dev $interface ingress
    sudo tc filter add dev $interface parent ffff: protocol ip u32 match u32 0 0 action connmark action mirred egress redirect dev ifb0
    sudo tc qdisc add dev ifb0 root sfq perturb 10
    sudo ip link set dev ifb0 up
    sudo ethtool -K $interface tx off rx off
done

# 调整TCP和UDP流量的优先级
for interface in $interfaces; do
    echo "Setting priority for TCP and UDP traffic on interface $interface..."
    sudo iptables -A OUTPUT -t mangle -p tcp -o $interface -j MARK --set-mark 10
    sudo iptables -A OUTPUT -t mangle -p udp -o $interface -j MARK --set-mark 20
    sudo iptables -A PREROUTING -t mangle -i $interface -j MARK --set-mark 10
    sudo iptables -A PREROUTING -t mangle -p udp -i $interface -j MARK --set-mark 20
done

# 设置文件描述符限制脚本
#!/bin/bash

# 获取内存大小(单位:MB)
total_memory=$(free -m | awk '/^Mem:/{print $2}')

# 计算文件描述符限制数值
if [[ $total_memory -eq 512 ]]; then
    limit=4096
else
    # 每增加512MB内存,文件描述符限制数值乘以2
    multiplier=$((total_memory / 512))
    limit=$((4096 * multiplier))
fi

# 设置文件描述符限制
echo "* hard nofile $limit" >> /etc/security/limits.conf
echo "* soft nofile $limit" >> /etc/security/limits.conf

echo "文件描述符限制已设置为 $limit"

# 提示用户重启系统
echo "系统优化完成,重启系统以应用新的内核"

此脚本暂时不再更新,优化效果中等,但稳定.最起码我测试优化后能提升3-4%

点赞
  1. jqdrvps说道:

    @hiohioo #7 给个腿啊!

  2. jerry048说道:

    有幾處可以優化一下,一下是一些參考文章:
    https://www.cnblogs.com/mauricewei/p/10502300.html
    https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux_for_real_time/7/html/tuning_guide/reduce_tcp_performance_spikes
    https://mozillazg.com/2019/06/linux-client-io-timeout-server-lost-drop-packet-tcp-retransmitted-ifconfig-txqueuelen.html
    https://kris.io/2015/10/01/kvm-network-performance-tso-and-gso-turn-it-off/
    https://unix.stackexchange.com/questions/528761/how-to-change-initcwnd-with-every-reboot
    https://sysctl-explorer.net/net/core/netdev_budget/
    https://lwn.net/Articles/837010/
    https://blog.donatas.net/blog/2017/03/09/tfo/
    https://docs.google.com/document/d/1oLhNg1skaWD4_DtaoCxdSRN5erEXrH-KnLrMwEpOtFY/preview
    https://blog.csdn.net/sinat_20184565/article/details/89262433

  3. jqdrvps说道:

    没空再做详细测试,补一个简测.下面效果图

    无优化

    优化后

回复 jqdrvps 取消回复

电子邮件地址不会被公开。必填项已用 * 标注

×
订阅图标按钮