昨天受一个vmiss_TQ调优启发,我也来问ai为我调优了

爵士 2026-07-31 01:47 1

最近看到坛友分享美西服务器通过调整 TCP 缓冲区、队列算法来提升高延迟线路的单线程性能。

原帖:https://www.nodeseek.com/post-847872-1 勾引我玩机,但是没有要到教程,今天有时间问了ai给我调的

各位有技术的大佬,看看是否靠谱,ai给我搞的

下面都是我让ai给我调了以后给我汇总,然后我粘贴过来的



  • 调优前的真实参数

  • 为什么已经开启 BBR 仍有优化空间

  • 适合 1GB VMISS 的参数

  • 带自动备份和一键回滚的完整脚本

  • 调优后的验证结果

  • 使用时需要注意的问题


目前参数已经成功生效,后续有时间再补充相同时间、相同节点下的 TQ/NQ 前后测速对比。




一、服务器配置


这台机器的基本配置如下:


系统:Debian 12
内核:6.1.0-49-cloud-amd64
CPU:1 核
内存:约 1GB
Swap:无
默认网卡:eth0
用途:Xray 代理入口
线路:VMISS 三网优化/精品回程

调优前,服务器已经开启 BBR:


当前拥塞算法:bbr
可用拥塞算法:reno cubic bbr
系统默认队列算法:fq
BBR 模块:已加载

乍一看似乎已经没有什么需要调整,但继续检查后发现,实际情况并不完全是标准的 BBR + fq




二、调优前存在的问题


1. 系统默认是 fq,但网卡实际运行的是 fq_codel


调优前执行:


tc qdisc show dev eth0

得到:


qdisc fq_codel 0: root refcnt 2 limit 10240p flows 1024 quantum 1514 ...

也就是说:


sysctl 默认队列:fq
eth0 实际队列:fq_codel

BBR 虽然已经启用,但实际网卡没有使用更适合配合 BBR pacing 的 fq




2. TCP 发送和接收缓冲区偏小


调优前参数:


net.core.rmem_max = 212992
net.core.wmem_max = 212992

net.ipv4.tcp_rmem = 4096 131072 6291456
net.ipv4.tcp_wmem = 4096 16384 4194304

换算下来:


TCP 最大发送缓冲:4MB
TCP 最大接收缓冲:6MB
Socket 收发上限:约 208KB

对于美西回国这种大约 140~180ms 延迟的链路,4MB 发送窗口容易限制单线程吞吐。


可以做一个简单估算:


单线程理论吞吐 ≈ TCP 窗口 ÷ RTT × 8

假设 RTT 为 160ms:


4MB 窗口约为 210Mbps
16MB 窗口约为 839Mbps

这并不代表调优后一定能跑到 839Mbps,只是说明本机 TCP 窗口不再先把单线程速度卡在约 200Mbps附近。


最终速度仍然受以下因素限制:



  • 商家端口限速

  • 共享带宽

  • 晚高峰拥堵

  • 客户端网络

  • 路由质量

  • 测速节点负载




3. MTU 黑洞探测未开启


原参数:


net.ipv4.tcp_mtu_probing = 0

部分跨境线路遇到 ICMP 被屏蔽或路径 MTU 异常时,可能出现特定网站卡顿、大包传输异常等情况。


本次设置为:


net.ipv4.tcp_mtu_probing = 1

模式 1 只会在检测到 MTU 黑洞时启动探测,并不是持续降低 MTU。




4. 空闲后会重新进入慢启动


原参数:


net.ipv4.tcp_slow_start_after_idle = 1

对于 SSH、API、代理以及间歇传输的长连接,短暂空闲后重新慢启动可能影响再次传输时的响应速度。


本次设置为:


net.ipv4.tcp_slow_start_after_idle = 0



三、最终采用的参数


考虑到这台机器只有 1GB 内存,我没有使用几十到几百 MB 的激进 TCP 缓冲,而是采用相对保守的 16MB 档:


net.core.default_qdisc = fq
net.ipv4.tcp_congestion_control = bbr

net.core.rmem_max = 33554432
net.core.wmem_max = 33554432

net.ipv4.tcp_rmem = 4096 262144 16777216
net.ipv4.tcp_wmem = 4096 65536 16777216

net.ipv4.tcp_window_scaling = 1
net.ipv4.tcp_mtu_probing = 1
net.ipv4.tcp_slow_start_after_idle = 0
net.ipv4.tcp_moderate_rcvbuf = 1

对应关系:


TCP 最大发送缓冲:16MB
TCP 最大接收缓冲:16MB
Socket 收发上限:32MB
拥塞算法:BBR
网卡队列:fq

这个参数更适合:



  • Debian 12/13

  • Linux 6.1 或更新内核

  • 1GB 左右内存

  • 美西高延迟回国线路

  • 200Mbps 至数百 Mbps 级别套餐

  • Xray、Sing-box、SSH、API 等 TCP 使用场景


不建议不同配置的机器完全照抄。


例如 512MB 内存小鸡需要进一步降低缓冲,2GB 以上内存和 G 口机器则可以根据实际 RTT、端口和并发量重新计算。




四、调优前先执行只读检查


下面的命令只查看参数,不会修改系统:


bash <<'EOF'
echo "================ 基本信息 ================"
date
echo
cat /etc/os-release 2>/dev/null | grep -E '^(PRETTY_NAME|VERSION_ID)='
echo "内核版本:$(uname -r)"
echo "CPU核心:$(nproc)"
echo
free -h

echo
echo "================ 默认网卡 ================"
IFACE=$(ip route show default 2>/dev/null | awk '/default/ {print $5; exit}')
echo "默认网卡:${IFACE:-未识别}"
ip -br link 2>/dev/null
ip route show default 2>/dev/null

echo
echo "================ BBR 支持情况 ================"
echo -n "当前拥塞算法:"
sysctl -n net.ipv4.tcp_congestion_control 2>/dev/null
echo -n "可用拥塞算法:"
sysctl -n net.ipv4.tcp_available_congestion_control 2>/dev/null
echo -n "默认队列算法:"
sysctl -n net.core.default_qdisc 2>/dev/null

if modinfo tcp_bbr >/dev/null 2>&1; then
echo "BBR模块:系统支持"
else
echo "BBR模块:modinfo 未检测到,可能内置于内核或尚不可用"
fi

lsmod 2>/dev/null | grep -E '^tcp_bbr' || echo "tcp_bbr 当前未以模块形式加载"

echo
echo "================ TCP 缓冲参数 ================"
for KEY in \
net.core.rmem_max \
net.core.wmem_max \
net.ipv4.tcp_rmem \
net.ipv4.tcp_wmem \
net.ipv4.tcp_window_scaling \
net.ipv4.tcp_mtu_probing \
net.ipv4.tcp_slow_start_after_idle \
net.ipv4.tcp_moderate_rcvbuf
do
sysctl "$KEY" 2>/dev/null || echo "$KEY = 不支持或不存在"
done

echo
echo "================ 当前队列规则 ================"
if [ -n "$IFACE" ]; then
tc qdisc show dev "$IFACE" 2>/dev/null || echo "无法读取 qdisc"
else
echo "未识别默认网卡"
fi

echo
echo "================ TCP 状态 ================"
ss -s 2>/dev/null

echo
echo "================ 代理程序 ================"
ps -eo pid,comm,args --sort=comm 2>/dev/null |
grep -E '[x]ray|[s]ing-box|[h]ysteria|[t]uic|[n]aive|[3]x-ui' |
sed -E 's/(password|passwd|token|secret|uuid)=[^ ]+/\1=已隐藏/Ig' ||
echo "没有识别到常见代理进程"

echo
echo "================ 检查结束 ================"
echo "本次仅查看参数,没有修改系统。"
EOF

建议先保存调优前的输出,再开始修改。




五、完整调优脚本


下面脚本具备以下功能:



  • 自动识别默认网卡

  • 检查 root 权限

  • 备份当前 sysctl 和 qdisc

  • 保持并加载 BBR

  • 写入 1GB VMISS 适用参数

  • 将实际网卡切换为 fq

  • 创建开机自动应用服务

  • 自动生成一键回滚脚本

  • 不修改 Xray、3x-ui、端口和防火墙


建议保留当前 SSH 窗口,同时新开一个 SSH 窗口备用。


bash <<'EOF'
set -Eeuo pipefail

if [ "$(id -u)" -ne 0 ]; then
echo "错误:请使用 root 执行。"
exit 1
fi

IFACE="$(ip -4 route show default | awk '/default/ {print $5; exit}')"

if [ -z "${IFACE}" ]; then
echo "错误:无法识别默认网卡。"
exit 1
fi

TIMESTAMP="$(date +%Y%m%d-%H%M%S)"
BACKUP_DIR="/root/vmiss-network-backup-${TIMESTAMP}"
CONFIG_FILE="/etc/sysctl.d/99-vmiss-network.conf"

mkdir -p "${BACKUP_DIR}"

echo "默认网卡:${IFACE}"
echo "备份目录:${BACKUP_DIR}"

# 备份当前状态
sysctl -a 2>/dev/null > "${BACKUP_DIR}/sysctl-all-before.txt" || true
tc qdisc show dev "${IFACE}" > "${BACKUP_DIR}/qdisc-before.txt" || true

if [ -f "${CONFIG_FILE}" ]; then
cp -a "${CONFIG_FILE}" \
"${BACKUP_DIR}/99-vmiss-network.conf.before"
fi

if [ -f /etc/modules-load.d/tcp-bbr.conf ]; then
cp -a /etc/modules-load.d/tcp-bbr.conf \
"${BACKUP_DIR}/tcp-bbr.conf.before"
fi

if [ -f /etc/systemd/system/vmiss-fq.service ]; then
cp -a /etc/systemd/system/vmiss-fq.service \
"${BACKUP_DIR}/vmiss-fq.service.before"
fi

if [ -f /usr/local/sbin/apply-vmiss-fq ]; then
cp -a /usr/local/sbin/apply-vmiss-fq \
"${BACKUP_DIR}/apply-vmiss-fq.before"
fi

# 保存原始参数,供回滚使用
OLD_DEFAULT_QDISC="$(sysctl -n net.core.default_qdisc)"
OLD_CC="$(sysctl -n net.ipv4.tcp_congestion_control)"
OLD_RMEM_MAX="$(sysctl -n net.core.rmem_max)"
OLD_WMEM_MAX="$(sysctl -n net.core.wmem_max)"
OLD_TCP_RMEM="$(sysctl -n net.ipv4.tcp_rmem)"
OLD_TCP_WMEM="$(sysctl -n net.ipv4.tcp_wmem)"
OLD_WINDOW_SCALING="$(sysctl -n net.ipv4.tcp_window_scaling)"
OLD_MTU_PROBING="$(sysctl -n net.ipv4.tcp_mtu_probing)"
OLD_SLOW_START="$(sysctl -n net.ipv4.tcp_slow_start_after_idle)"
OLD_MODERATE_RCVBUF="$(sysctl -n net.ipv4.tcp_moderate_rcvbuf)"
OLD_QDISC_TYPE="$(tc qdisc show dev "${IFACE}" | awk 'NR==1 {print $2}')"

if [ -z "${OLD_QDISC_TYPE}" ]; then
OLD_QDISC_TYPE="fq_codel"
fi

# 加载 BBR
modprobe tcp_bbr
printf '%s\n' 'tcp_bbr' > /etc/modules-load.d/tcp-bbr.conf

# 写入 TCP 参数
cat > "${CONFIG_FILE}" <<'SYSCTL'
# VMISS high-latency TCP tuning
# Debian 12/13, Linux 6.1+, 1GB RAM

net.core.default_qdisc = fq
net.ipv4.tcp_congestion_control = bbr

# Socket buffer ceilings: 32MB
net.core.rmem_max = 33554432
net.core.wmem_max = 33554432

# TCP minimum / initial / maximum buffers
net.ipv4.tcp_rmem = 4096 262144 16777216
net.ipv4.tcp_wmem = 4096 65536 16777216

net.ipv4.tcp_window_scaling = 1
net.ipv4.tcp_mtu_probing = 1
net.ipv4.tcp_slow_start_after_idle = 0
net.ipv4.tcp_moderate_rcvbuf = 1
SYSCTL

sysctl -p "${CONFIG_FILE}"

# 自动识别默认网卡并应用 fq
cat > /usr/local/sbin/apply-vmiss-fq <<'SCRIPT'
#!/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

IFACE="$(ip -4 route show default | awk '/default/ {print $5; exit}')"
[ -n "${IFACE}" ] || exit 1

exec tc qdisc replace dev "${IFACE}" root fq
SCRIPT

chmod 0755 /usr/local/sbin/apply-vmiss-fq

# 创建开机自动应用服务
cat > /etc/systemd/system/vmiss-fq.service <<'SERVICE'
[Unit]
Description=Apply fq qdisc for VMISS network tuning
Wants=network-online.target
After=network-online.target

[Service]
Type=oneshot
ExecStart=/usr/local/sbin/apply-vmiss-fq
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target
SERVICE

systemctl daemon-reload
systemctl enable --now vmiss-fq.service >/dev/null

# 生成一键回滚脚本
cat > "${BACKUP_DIR}/rollback.sh" <<ROLLBACK
#!/bin/bash
set -Eeuo pipefail

cat > /etc/sysctl.d/99-vmiss-network.conf <<'OLDSYSCTL'
net.core.default_qdisc = ${OLD_DEFAULT_QDISC}
net.ipv4.tcp_congestion_control = ${OLD_CC}
net.core.rmem_max = ${OLD_RMEM_MAX}
net.core.wmem_max = ${OLD_WMEM_MAX}
net.ipv4.tcp_rmem = ${OLD_TCP_RMEM}
net.ipv4.tcp_wmem = ${OLD_TCP_WMEM}
net.ipv4.tcp_window_scaling = ${OLD_WINDOW_SCALING}
net.ipv4.tcp_mtu_probing = ${OLD_MTU_PROBING}
net.ipv4.tcp_slow_start_after_idle = ${OLD_SLOW_START}
net.ipv4.tcp_moderate_rcvbuf = ${OLD_MODERATE_RCVBUF}
OLDSYSCTL

sysctl -p /etc/sysctl.d/99-vmiss-network.conf

systemctl disable --now vmiss-fq.service 2>/dev/null || true
rm -f /etc/systemd/system/vmiss-fq.service
rm -f /usr/local/sbin/apply-vmiss-fq
systemctl daemon-reload

IFACE="\$(ip -4 route show default | awk '/default/ {print \$5; exit}')"

if [ -n "\${IFACE}" ]; then
tc qdisc replace dev "\${IFACE}" root ${OLD_QDISC_TYPE} || true
fi

echo "已恢复调优前的 sysctl 参数和队列算法。"
ROLLBACK


chmod 0700 "${BACKUP_DIR}/rollback.sh"

echo
echo "================ 调优后状态 ================"
echo "备份目录:${BACKUP_DIR}"
echo "回滚命令:bash ${BACKUP_DIR}/rollback.sh"
echo

sysctl net.ipv4.tcp_congestion_control
sysctl net.core.default_qdisc
sysctl net.core.rmem_max
sysctl net.core.wmem_max
sysctl net.ipv4.tcp_rmem
sysctl net.ipv4.tcp_wmem
sysctl net.ipv4.tcp_window_scaling
sysctl net.ipv4.tcp_mtu_probing
sysctl net.ipv4.tcp_slow_start_after_idle
sysctl net.ipv4.tcp_moderate_rcvbuf

echo
tc qdisc show dev "${IFACE}"

echo
systemctl --no-pager --full status vmiss-fq.service || true

echo
echo "调优完成,没有修改或重启 Xray。"
EOF



六、我的实际执行结果


脚本执行后,参数显示为:


net.ipv4.tcp_congestion_control = bbr
net.core.default_qdisc = fq

net.core.rmem_max = 33554432
net.core.wmem_max = 33554432

net.ipv4.tcp_rmem = 4096 262144 16777216
net.ipv4.tcp_wmem = 4096 65536 16777216

net.ipv4.tcp_window_scaling = 1
net.ipv4.tcp_mtu_probing = 1
net.ipv4.tcp_slow_start_after_idle = 0
net.ipv4.tcp_moderate_rcvbuf = 1

网卡实际队列:


qdisc fq 8001: root refcnt 2 limit 10000p flow_limit 100p ...

说明原来的:


BBR + fq_codel + 4MB发送缓冲

已经变成:


BBR + fq + 16MB TCP缓冲

systemd 服务也设置为了开机启动:


vmiss-fq.service

改进版脚本使用:


systemctl enable --now vmiss-fq.service

正常情况下服务会显示:


Active: active (exited)



七、调优后验证命令


执行:


sysctl net.ipv4.tcp_congestion_control
sysctl net.core.default_qdisc
sysctl net.core.rmem_max
sysctl net.core.wmem_max
sysctl net.ipv4.tcp_rmem
sysctl net.ipv4.tcp_wmem
sysctl net.ipv4.tcp_mtu_probing
sysctl net.ipv4.tcp_slow_start_after_idle
tc qdisc show dev "$(ip -4 route show default | awk '/default/ {print $5; exit}')"
systemctl is-enabled vmiss-fq.service
systemctl is-active vmiss-fq.service

预期应包含:


bbr
fq
33554432
16777216
qdisc fq
enabled
active

检查 Xray 是否仍正常:


pgrep -a xray
ss -s

本次调优:



  • 没有修改 Xray 配置

  • 没有修改节点端口

  • 没有修改防火墙

  • 没有修改 IP 和路由

  • 没有重启 Xray

  • 没有重启网卡

  • 不需要立即重启服务器


tc qdisc replace 只替换发送队列,通常不会中断 SSH,但操作网络参数时仍建议保留一个备用 SSH 窗口。




八、一键回滚


脚本执行完成后会显示类似:


备份目录:/root/vmiss-network-backup-日期时间
回滚命令:bash /root/vmiss-network-backup-日期时间/rollback.sh

需要恢复时,直接复制脚本输出的回滚命令即可,例如:


bash /root/vmiss-network-backup-20260730-173003/rollback.sh

注意每个人的备份目录时间不同,不要照抄我这里的路径,应以自己脚本执行后显示的路径为准。




以上参数仅供同类配置参考,建议先查看自己的系统、内存、带宽、当前队列和 TCP 参数,再决定是否调整,不建议无脑复制。

最新回复 (8)
  • JasonX 07-31 01:51
    1

    鸡是大妈的?

  • 了却无 07-31 01:53
    2

    不错不错,先收藏明天慢慢看 ^-^

  • 爵士 楼主 07-31 01:53
    3

    @JasonX #1 哈哈佬我写得有vmiss呀

  • dfff840 07-31 02:41
    4

    有没有调优前后的网络数据对比啊

  • 爵士 楼主 07-31 02:43
    5

    @dfff840 #4 太晚了,熬不住了,懒得测了

  • dfff840 07-31 02:44
    6

    @爵士 #5 好的佬

  • rosnode 07-31 09:00
    7

    @爵士 #0


    比较关心优化以后 operf3 0重传 能跑到多少?

    Speedtest能跑到多少

  • lilil 07-31 09:02
    8

    收藏了

* 帖子来源NodeSeek
返回