github Kylin010/tcpfit v0.5.9

16 days ago

修复:一次扫描跑掉几百 GB 流量

有用户反馈,一台 10G 口的机器跑一次一键调优用掉了 400 GB。原因有两个:

  • 拐点区间很宽时,精修步长没有跟着放大,一口气精修了 43 档,每档都按 8.5G 满速跑 12 秒。
  • 开始前的流量预估按你填的带宽算(填 200 就告诉你约 3 GB),扫描实际却按端口能跑的速率走。

现在:

  • 精修档数有上限。同一份数据,精修从 43 档降到 7 档。
  • 扫描前按实测速率重新估算流量,下面几种情况会停下来问你,默认不扫:
    • 实测远高于你填的带宽(3 倍以上)
    • 一键调优里,实际要扫的比确认页上给你看的预估多出一半以上,且超过 50 GB
    • 菜单 3 / 命令行:预计超过 50 GB(这两处开始前没给过预估),手工指定区间(--from/--to)也一样
  • 带宽那一问直接回车(现场实测)时,测完先告诉你这一轮大约要用多少流量;超过 50 GB 会问你,默认只做基础调优。
  • 在确认处选「否」之后,不再接着满速跑验证。
  • 带宽填 0 / m 时,确认页不再写「预计流量 很少」—— 不扫描,但验证照样满速跑,10G 口约 35 GB。

10G 口、限速器在 9000 的机器上(模拟):

以前 现在
填 200,端口跑 8500(用户实报) 约 400 GB 停下来问;拒绝的话总共约 13 GB
带宽直接回车 约 230 GB,一句不问 测完先问;回车只用掉测带宽的约 10 GB
菜单 3 / 命令行扫描 约 200 GB,一句不问 预计超过 50 GB 先问

千兆机器一轮约 29 GB,在确认线以下,不会多问。无人值守跑扫描要显式加 --yes。

修复:没有终端时会自动跑完一键调优

ssh 主机 tcpfit(没加 -t)、cron、面板里的「执行命令」这类没有终端的场景,菜单会按默认值自动选 1,一路跑完测速、扫描和整形;没装上 iperf3 时还会刷屏不停。

现在菜单发现没有终端就直接退出,并提示用 ssh -t 或子命令。

修复:initcwnd 32 在重启或网络服务重启后丢失

initcwnd 设在默认路由上,不是 sysctl,网卡重连、网络服务重启都会把它冲掉。以前的持久化有三个漏洞:

  • 普通 Debian VPS(没装 networkd-dispatcher)根本没有持久化,重启就丢。
  • 较新的 networkd-dispatcher(Ubuntu 24.04 等)开机时发现没有钩子就不启动,tcpfit 写了钩子也没人执行,要等下次开机。
  • 自动安全更新(比如 openssl)装完会重启 systemd-networkd,路由被重建,窗口就没了,钩子也补不回来。

现在按机器挑最稳的一种:

机器 做法
PPP 拨号 pppd 每次拨通后执行的钩子
systemd-networkd 管的 DHCP 网卡,systemd 255 起(Ubuntu 24.04 / Debian 13) 写进 networkd 自己的配置,网络服务重启、续租、开机都不丢
networkd 管的其他网卡(Ubuntu 22.04 等) dispatcher 钩子,并确保它在运行
其他有 systemd 的机器(ifupdown / NetworkManager) 开机执行一次的 systemd 单元

⚠️ 用旧版调过的机器,更新后要重跑一次基础调优(菜单 2),新的持久化方式才会装上 —— tcpfit update 只换脚本本身。

修复:可能把机器搞坏的几处

  • 恢复存档时会把存档里的整条路由写回去:网关变过的机器可能断网,metric 变过的会多出一条默认路由。现在只把窗口值套到当前路由上。
  • 回滚时如果路由的 metric 变过,会留下两条默认路由。
  • PPP 钩子会改到别的网卡的默认路由。
  • 探测带宽会清掉其他工具设好的 HTB 限速。现在先提醒,你可以取消。

修复:结果不准、误报成功

  • 10G 机器单流有丢包、8 流零丢包时,会按单流速率去扫,把一台没有限速器的机器限到约五分之一。现在按 8 流结果判断。
  • 对端太慢、测不准时,会把你以前测好的整形删掉。现在保留。
  • 扫描中途失败时,会说「扫完了,没有限速器」。现在说「判不出」,不动已有整形。
  • 快照或配置文件写失败时,仍继续改系统并报成功。
  • 整形没生效时,结果页仍写「已应用」、退出码为 0;验证全部失败时退出码也是 0。

其他

  • Debian 12/13 不再提示「内核不接受 netdev_budget_usecs」(这个参数不再设置,用内核默认值)
  • PPP 拨号:小带宽机器跑完会把「重拨后恢复整形」的钩子一起删掉;重拨后会把存档里的窗口值改回 32
  • 安装中途断开不会再损坏已装的版本
  • 走策略路由、有多个出口的机器,按测速目标选网卡
  • 后台统计不再占着锁,导致报「另一个 tcpfit 正在运行」
  • --margin 填负数会被拒绝

实测

  • 新增流量、持久化两套回归测试,连同原有五套全部通过;每条新用例都对旧版本跑过,确认会失败
  • 在跑真实 systemd-networkd 的容器里(Ubuntu 24.04 / 22.04)验证:networkd 连续重启、网卡断开重连后窗口的表现,以及回滚后撤得干净
  • 在一台 OVH 10G 口 / 500M 套餐的 Ubuntu 24.04 上实跑基础调优:抓到并修掉了一个只在真机上出现的判断失误,之后 networkd 配置正确生成,默认路由属性完整,业务不受影响

更新

tcpfit update

或菜单选 8。更新后重新运行一次 tcpfit;用旧版调过的机器再跑一次基础调优(菜单 2)。

校验

sha256sum -c SHA256SUMS

Don't miss a new tcpfit release

NewReleases is sending notifications on new releases.