tcpfit — 按每台机器实测推导的 TCP 调优脚本
一键脚本,通过免费 iperf3 服务器实测,全球 15 个城市 18 个节点,也可以用自己的机器
我已经在自己的所有优化机器,包括生产力机器上运行.由我自己(和claude)开发
0.4.2版本已经上线,修复了大量已知BUG!
机器跑不满?G口只能跑200m?断流严重?看youtube卡顿?或许这个脚本可以帮到你!!
调优脚本非常多,但是我自己测试后可以放心在自己所有主力机器上使用.一个脚本即可做到调优所有优化机器
】
实测效果
测试机:VMISS 9929,500Mbps
TcpQuality 综合测速
前

后

| 九节点均值 | 回程 | 去程 |
|---|---|---|
| 原厂 | 144.0 Mbps | 53.0 Mbps |
| tcpfit | 471.1 Mbps | 76.1 Mbps |
| 3.27 倍 | 1.44 倍 |
单节点最高:上海电信 131.7 → 545.4 Mbps。
回程重传次数从 149 涨到 323,但吞吐涨了 3.27 倍 —— 换算成每 Mbps 的重传降了 34%。
去程只涨 1.44 倍是正常的:去程 = 国内往服务器发,发多快由国内那台说了算,服务器只能控制接收窗口。
单线程测速
前

后

| 平均 | 峰值 | |
|---|---|---|
| 原厂 | 186.44 Mbps | 217.83 Mbps |
| tcpfit | 401.69 Mbps | 485.72 Mbps |
2.2 倍,原厂内核,不换内核不重启。
顺便看一眼 TQ 自己给的注释
图里那句「以美西为例:160ms延迟+4M发送缓存=理论单线程200Mbps」。
这台原厂发送缓冲就是 4M,RTT 164ms:
4 MB × 8 ÷ 0.164s = 205 Mbps
而原厂实测峰值 217.83 —— 死死卡在天花板上。
tcpfit 把它按 带宽 × RTT 抬到 18.1M,天花板变成 949 Mbps,实测峰值 485.72。
使用
bash <(curl -fsSL https://raw.githubusercontent.com/Kylin010/tcpfit/main/tcpfit.sh)
跑完出菜单,选 1 全自动。只问三个问题:
- 带宽多少 —— 不想扫拐点就填
0,已知限速值输入m直接指定 - 测速对端 —— 回车用免费公共节点,或填自己另一台机器的 IP
- 机器用途 —— 代理 / 大文件传输
装好之后敲 tcpfit 进菜单。

免费 iperf3 节点
脚本自带 18 个节点,会并发 ping 一圈自动选最近可用的,不用你操心:
| 地区 | 城市 | 提供方 |
|---|---|---|
| 亚太 | 香港 | Leaseweb |
| 新加坡 | Leaseweb / OVH | |
| 东京 | Leaseweb | |
| 悉尼 | Leaseweb | |
| 欧洲 | 法兰克福 | Leaseweb |
| 阿姆斯特丹 | Leaseweb / Clouvider | |
| 伦敦 | Leaseweb / Clouvider | |
| 北美 | 洛杉矶 | Leaseweb |
| 旧金山 | Leaseweb | |
| 西雅图 | Leaseweb | |
| 达拉斯 | Leaseweb | |
| 芝加哥 | Leaseweb | |
| 纽约 | Leaseweb | |
| 迈阿密 | Leaseweb | |
| 蒙特利尔 | Leaseweb |
测的是你的端口能发多快,所以对端越近越准。 有自己的另一台机器就更好,那边跑 iperf3 -s,把 IP 填进去就行。
原理
一、基础调优
按 带宽 × RTT 算 BDP,缓冲区给 2 倍 BDP,上限跟内存挂钩(不超过 TCP 全局预算的 1/8)。
再加 BBR + fq、起步优化(slow_start_after_idle=0、initcwnd 32)、队列和连接参数,共 32 项。
二、限速器拐点(iperf3)
先不限速跑一次:
- 丢包低 → 你的口上没有限速器,不整形
- 丢包高 → 有限速器,从实测吞吐往上扫找拐点
找到拐点后退一点安全余量,用 HTB 聚合限速 + fq 叶子 pacing 应用。
为什么限速反而更快(另一台 500M 机器实测):
不限速 吞吐 481 Mbps 10 秒重传 61,266 次
限到 530 吞吐 499 Mbps 10 秒重传 5 次
限速器看的是瞬时速率。不加 pacing 的 TCP 是突发式发送,平均没超也会被打穿。加上 fq 的逐包 pacing,就能贴着真实上限跑而几乎不丢包。
三、回滚
tcpfit rollback # 完整回滚
tcpfit shape --off # 只去掉整形,保留基础调优
首次改动前自动存快照,记录全部 33 项参数原始值。
所有改动位置:
/etc/sysctl.d/99-tcpfit.conf
/etc/systemd/system/tcpfit-qdisc.service
/usr/local/sbin/tcpfit-qdisc.sh
/etc/networkd-dispatcher/routable.d/50-tcpfit-initcwnd
/etc/modules-load.d/tcpfit-bbr.conf
/var/lib/tcpfit/
流量和时间
拐点扫描要真跑流量:
| 带宽 | 有限速器 | 没有限速器 |
|---|---|---|
| 300M | 3.5 GB / 3 分钟 | 0.4 GB / 1 分钟 |
| 500M | 8.8 GB / 4 分钟 | 0.7 GB / 1 分钟 |
| 1000M | 22 GB / 4.5 分钟 | 1.5 GB / 1 分钟 |
先只测一档判断有没有限速器,没有就到此为止。超过 2500 Mbit 速率会提醒.
只要基础调优:菜单选 2,1 分钟,几乎不耗流量。
调不了什么
瓶颈在国际链路而不是你的端口时,调服务器没用。典型表现是不限速跑也不丢包,但到国内就是上不去 —— 这种情况脚本会报「未检测到限速器」,基础调优仍然生效,但整形那部分没有收益。
源码 https://github.com/Kylin010/tcpfit (MIT)
目前测试了自己所有优化机器,均有不同程度提升。包括那些只有个位数mbps的机器也拉到正常水平了。
如果你们有更好的意见,或者自己机器比较特殊,或者有什么需求,还是说想在群里交流学习都可以进来看看!
频道会发布更新,交流群是采纳意见和交流。
TG频道 更新频道
TG讨论群 讨论群
