网络栈调优98 条

网络调优闭环方法

网络参数调优需要基线、单变量变更与回滚记录: 先量化现状, 一次只改一项并用同一测量方法复测。

网络调优的闭环方法

内核网络参数调优应当是可复现的闭环:先量化现状形成基线,再单变量变更,用同一测量方法复测,记录结论并保留回滚手段。内核计数器都是累计值,必须用区间差值观察,否则无法把变更与效果对应起来。没有基线的「调优」只是猜测。

基本信息

基线采集nstat -az > /tmp/net-before.txt
变更后对比nstat -az | diff /tmp/net-before.txt -
持久化位置/etc/sysctl.d/99-*.conf,然后 sysctl --system
回滚方式删除对应行或文件后再次 sysctl --system
记录内容变更原因、时间、变更前后数据、观察结论

执行步骤

  • 明确要解决的问题与可量化的目标指标
  • 采集 10 分钟以上的基线,覆盖业务高峰与低谷
  • 一次只改一项参数,并写下预期影响
  • 用与基线相同的工具、时段与口径复测
  • 记录差值结论;未达预期就回滚,而不是继续叠加参数

基线与复测

基线与复测
nstat -az > /tmp/net-before.txt          # 变更前:所有计数器留档
ss -s > /tmp/ss-before.txt               # 连接状态分布留档
nstat -az | diff /tmp/net-before.txt -    # 变更后:只看发生变化的计数器

持久化与回滚

持久化与回滚
echo 'net.ipv4.tcp_max_syn_backlog = 4096' > /etc/sysctl.d/99-tune.conf
sysctl --system                          # 重新加载并确认无报错
sysctl net.ipv4.tcp_max_syn_backlog      # 校验生效值
# 回滚:删除对应行或整个文件后再次 sysctl --system
用 sysctl -w 只改运行态,重启即失效;正式变更必须落到 /etc/sysctl.d/ 下的文件,并在变更记录里同时写明运行态与配置文件的对应关系。
涉及连接回收、重传、队列长度的参数在高并发下可能引发连锁反应。生产环境变更前应确认回滚路径可用,并准备好在异常时立刻恢复默认值。

变更记录要点

  • 变更目标:要解决的具体性能或稳定性问题
  • 变更内容:配置文件、参数名、原值与新值
  • 验证方式:使用哪个工具、采样多久、对比哪个时间区间
  • 回滚步骤:恢复到哪个值、由谁执行、如何验证已恢复
同一次变更尽量不要跨越业务高峰:高峰时段的流量特征变化本身就会影响计数器,叠加参数变更后很难判断谁是主因。

易错点

  • 一次改多项参数,效果无法归因,出问题也不知道该回滚哪一项
  • 凭感觉判断改善,没有前后数据对比,结论无法复现
  • 只改运行态不落盘,重启后参数复原且无人察觉
  • 忽略采样时段的影响,用低谷数据对比高峰数据得出错误结论

数据来源与参考

  • man nstat
  • man sysctl.d
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌