[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-94503":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":9,"language":10,"languages":9,"totalLinesOfCode":9,"stars":11,"forks":12,"watchers":13,"openIssues":14,"contributorsCount":15,"subscribersCount":15,"size":15,"stars1d":15,"stars7d":15,"stars30d":16,"stars90d":15,"forks30d":15,"starsTrendScore":15,"compositeScore":17,"rankGlobal":9,"rankLanguage":9,"license":18,"archived":19,"fork":19,"defaultBranch":20,"hasWiki":21,"hasPages":19,"topics":22,"createdAt":9,"pushedAt":9,"updatedAt":31,"readmeContent":32,"aiSummary":33,"trendingCount":15,"starSnapshotCount":15,"syncStatus":34,"lastSyncTime":35,"discoverSource":36},94503,"tcpfit","Kylin010\u002Ftcpfit","Kylin010","按每台机器实测推导的 TCP 调优工具 —— 不套用固定参数，实测 BDP 与限速器拐点",null,"Shell",373,47,114,1,0,259,55.04,"MIT License",false,"main",true,[23,24,25,26,27,28,29,30],"bbr","linux","network-tuning","performance","proxy","shell","tcp","vps","2026-08-24 04:01:22","# tcpfit\n\n按每台机器实测推导的 TCP 调优工具. 不套用固定参数, 实测 BDP 与限速器拐点.\n\n本脚本由 [kylin010](https:\u002F\u002Fgithub.com\u002FKylin010) 编写和维护.\n\n## 安装\n\n```bash\nbash \u003C(curl -fsSL https:\u002F\u002Fraw.githubusercontent.com\u002FKylin010\u002Ftcpfit\u002Fmain\u002Ftcpfit.sh)\n```\n\n跑完直接出菜单, 选 1 全自动. 脚本会装到 `\u002Fusr\u002Flocal\u002Fbin\u002Ftcpfit`, 以后敲 `tcpfit` 即可.\n\n## 三种用法\n\n| 用法 | 命令 |\n|---|---|\n| 一键跑 | `bash \u003C(curl -fsSL ...\u002Fmain\u002Ftcpfit.sh)` |\n| 装好后 | `tcpfit` |\n| 子命令 | `tcpfit tune --role proxy --bw 500` |\n\n## 菜单\n\n```\n   1. 一键调优   Auto-tune (recommended)  ~10 min\n   2. 基础调优   Base tuning only          ~1 min\n   3. 拐点测试   Policer sweep             ~8 min\n   4. 加 swap    Add swap (low-memory box)\n   ────────────────────────────────────────────\n   5. 查看状态   Status\n   6. 端口验证   Verify port capability    ~1 min\n   7. 回滚改动   Rollback all changes\n   8. 检查更新   Check for updates\n```\n\n脚本不会自动更新. 装好之后跑的一直是装的那一版, 想升级用菜单 8 或 `tcpfit update` ——\n它只检查, 发现新版本会问你要不要更新.\n\n一键调优只问三个问题: 带宽、测速对端、机器用途. 确认之后跑到底不再打断.\n\n带宽那一问支持四种输入:\n\n| 输入 | 行为 |\n|---|---|\n| 数字 | 按该带宽推导缓冲区, 然后实测拐点 |\n| 回车 | 现场实测带宽, 然后实测拐点 |\n| `m` | 直接填限速值, 跳过拐点扫描 |\n| `0` | 不做整形 |\n\n## 子命令\n\n```bash\ntcpfit detect                                     # 机器画像\ntcpfit probe    --peer \u003C近处iperf3服务器>          # 探测可用带宽\ntcpfit tune     --role proxy --bw 500             # 基础调优\ntcpfit sweep    --peer \u003C近处iperf3服务器> --nominal 500\ntcpfit shape    --rate 510                        # 应用整形\ntcpfit shape    --off                             # 移除整形, 保留基础调优\ntcpfit harden   --swap 2G                         # 加 swap\ntcpfit verify   --peer \u003C近处iperf3服务器>          # 测速验证\ntcpfit status                                     # 当前配置\ntcpfit rollback                                   # 回滚全部改动\ntcpfit update                                     # 检查更新\n```\n\n## 多机（未上线）\n\n多机编排还没在真实环境验证过, 暂时不建议使用. 下面的用法仅供参考.\n\n\n```bash\ncp inventory\u002Fservers.example.yml inventory\u002Fservers.yml\nchmod 600 inventory\u002Fservers.yml\nvi inventory\u002Fservers.yml\n\npython3 orchestrator\u002Ffleet.py detect\npython3 orchestrator\u002Ffleet.py tune\npython3 orchestrator\u002Ffleet.py sweep\npython3 orchestrator\u002Ffleet.py shape --auto\npython3 orchestrator\u002Ffleet.py verify\n```\n\n选项: `--only 机器名` `--tag 标签` `-j 并发数` `--dry-run`.\n临时执行任意命令: `fleet.py run -- uptime`.\n\n## 它改了什么\n\n| 类别 | 参数 |\n|---|---|\n| 拥塞控制 | `tcp_congestion_control=bbr` + `default_qdisc=fq` |\n| 缓冲区 | `tcp_rmem` \u002F `tcp_wmem` \u002F `rmem_max` \u002F `wmem_max` \u002F `tcp_mem` |\n| 窗口 | `tcp_window_scaling` \u002F `tcp_moderate_rcvbuf` \u002F `tcp_adv_win_scale` |\n| 队列 | `netdev_max_backlog` \u002F `netdev_budget` \u002F `somaxconn` 等 |\n| 连接 | `tcp_tw_reuse` \u002F `tcp_fin_timeout` \u002F `ip_local_port_range` 等 |\n| 起步 | `tcp_slow_start_after_idle=0` \u002F `initcwnd 32` |\n| 出向整形 | HTB 全局上限 + fq 叶子 pacing |\n\n共 32 个 sysctl 参数. 缓冲区和整形值按每台机器实测推导, 不是固定值.\n\n## 拐点扫描怎么工作\n\n先不限速跑一次, 看有没有东西在打你:\n\n| 结果 | 动作 |\n|---|---|\n| 丢包低 | 没有限速器, 不整形 |\n| 丢包高 | 有限速器, 从实测吞吐往上扫找拐点 |\n| 吞吐 > 2500 Mbit | 超出扫描上限, 不扫（可用 `--cap` 调整） |\n\n拐点在\"不限速吞吐\"的**上面** —— 打穿限速器会让吞吐掉下来, 所以往上找.\n\n## 回滚\n\n```bash\ntcpfit rollback                # 按快照逐项写回, 不是恢复默认\ntcpfit rollback --purge-swap   # 同时删掉 harden 建的 \u002Fswapfile\ntcpfit shape --off    # 只去掉整形\n```\n\n首次改动前自动存快照到 `\u002Fvar\u002Flib\u002Ftcpfit\u002Fpre-tune.snapshot`, 记录全部 32 项参数的原始值.\n\nswap 默认不动 —— 删掉正在用的 swap 可能让机器立刻 OOM, 要一并撤销得显式加 `--purge-swap`.\n\n改动只落在这些文件, 不碰 `\u002Fetc\u002Fsysctl.conf`:\n\n```\n\u002Fetc\u002Fsysctl.d\u002F99-tcpfit.conf\n\u002Fetc\u002Fsystemd\u002Fsystem\u002Ftcpfit-qdisc.service\n\u002Fusr\u002Flocal\u002Fsbin\u002Ftcpfit-qdisc.sh\n\u002Fetc\u002Fnetworkd-dispatcher\u002Froutable.d\u002F50-tcpfit-initcwnd\n\u002Fetc\u002Fmodules-load.d\u002Ftcpfit-bbr.conf\n\u002Fvar\u002Flib\u002Ftcpfit\u002F\n```\n\n用了 `harden --swap` 还会创建 `\u002Fswapfile` 并往 `\u002Fetc\u002Ffstab` 加一行 —— 这两个 `rollback` 默认不动,\n要一并撤销加 `--purge-swap`. 缺 iperf3 时经你确认后会用包管理器安装它.\n\n## 已知限制\n\n- 瓶颈在国际链路而非端口时, 整形不会带来提升, 但输出看起来一切正常\n- 扫满区间没找到拐点时会把区间上界当成拐点, 这种情况用 `m` 手动指定\n- 需要 Linux + systemd + iproute2. OpenVZ\u002FLXC 上 `tc` 和 `initcwnd` 可能受限\n- `sweep` 需要一台近处的 iperf3 对端\n\n## 从 nettune 升级\n\n老机器上的产物文件名还是 `nettune-*`, 新版本会自动检测并搬迁, 快照和 rollback 都保留. 直接跑新版即可.\n\n## 许可证\n\n[MIT](LICENSE)\n","tcpfit 是一款面向 Linux 服务器的实测驱动型 TCP 网络调优工具，不依赖预设参数，而是通过实测带宽、BDP（带宽时延积）及限速器拐点，动态推导并配置拥塞控制（BBR）、缓冲区、队列、窗口等 32 项 sysctl 参数。核心能力包括全自动调优、限速器拐点扫描、出向流量整形（HTB+fq）、机器画像与状态回滚。适用于 VPS、代理服务器、中转节点等对网络吞吐与低延迟有明确要求的场景，尤其适合带宽受限或存在隐式限速的云主机环境。",2,"2026-08-10 02:30:09","CREATED_QUERY"]