别再抄网上的 sysctl 调参模板了

网上一搜 TCP 优化,全是同一套 sysctl.conf 参数抄来抄去。问题是:你那台机器的带宽、延迟、有没有限速器,跟别人完全不一样,固定参数套上去,轻则没效果,重则适得其反。

tcpfit 的思路不一样——它先给机器"画像",再实测带宽,甚至扫描限速器拐点,最后才推导出专属这套环境的缓冲区参数。不猜,不套模板。

它做了什么

一键调优(tcpfit tune)总共调整 32 个 sysctl 参数,涵盖:

  • 拥塞控制:启用 BBR + fq 队列
  • 缓冲区tcp_rmem / tcp_wmem / rmem_max / wmem_max / tcp_mem——按实测 BDP(带宽延迟积)推导,不是固定值
  • 窗口缩放tcp_window_scaling / tcp_moderate_rcvbuf / tcp_adv_win_scale
  • 队列与连接netdev_max_backlog / somaxconn / tcp_tw_reuse / tcp_fin_timeout
  • 起步加速tcp_slow_start_after_idle=0 + initcwnd 32
  • 出向整形:HTBG 全局上限 + fq 叶子 pacing,按实测拐点设置

最有意思的是拐点扫描(policer sweep):先不限速跑一次,如果丢包率高说明有服务商限速器,就往上扫实测吞吐,找出限速拐点,再针对性整形——把限速器的便宜占满,又不触发惩罚。

怎么用

# 一键安装
bash <(curl -fsSL https://raw.githubusercontent.com/Kylin010/tcpfit/main/tcpfit.sh)

# 跑完直接出菜单,选 1 全自动调优(约 10 分钟,只问三个问题)
tcpfit

# 或者用子命令精确控制
tcpfit detect                       # 机器画像
tcpfit probe --peer <iperf3服务器>  # 探测可用带宽
tcpfit tune --role proxy --bw 500   # 基础调优
tcpfit shape --rate 510             # 应用整形
tcpfit sweep --peer <服务器> --nominal 500  # 拐点扫描
tcpfit rollback                     # 按快照回滚

首次改动前会自动保存快照到 /var/lib/tcpfit/pre-tune.snapshot,回滚是按快照逐项写回,不是粗暴恢复默认。改动只落在 /etc/sysctl.d/99-tcpfit.conf 等文件,不碰 /etc/sysctl.conf。老版本 nettune 的产物也会自动检测并搬迁,快照回滚都保留。

适合谁

  • 跑代理、机场、中转的服务器,想榨干带宽
  • 被服务商限速搞烦了,想找到拐点精准整形的人
  • 多台机器想批量调优的(自带 orchestrator/fleet.py,支持 --only / --tag / 并发)

要注意

  • 需要 Linux + systemd + iproute2,OpenVZ/LXC 上 tcinitcwnd 可能受限
  • 瓶颈在国际链路而非端口时,整形不会带来提升(但输出看起来一切正常)
  • sweep 需要一台近处的 iperf3 对端

总结

tcpfit 的核心价值是**"实测优先"**:用工具代替猜测,用数据代替模板。对跑在限速环境下的机器,它比任何固定参数方案都更靠谱。

前往 GitHub 仓库 · 430 ★