首页/系统/Linux 内核与性能调优速查/net.ipv4.tcp_syn_retries 主动建连接重试
sysctl 内核参数72 条

net.ipv4.tcp_syn_retries 主动建连接重试

控制本机作为客户端发起连接时 SYN 的重传次数;默认 6 次累计等待约 2 分钟才放弃,内网服务常下调以快速失败。

tcp_syn_retries 是什么

net.ipv4.tcp_syn_retries 控制本机作为客户端主动发起连接时,SYN 报文被重传的次数。默认 6 次,按 1、2、4、8、16、32 秒的指数退避累加,总共约 127 秒才会向应用返回连接失败。这个默认值对故障感知来说太慢:下游服务已经不可达,调用方却要挂两分多钟才报错,期间线程与连接池都被占住。内网服务常把它下调到 2 或 3,让故障更快暴露出来。

基本信息

参数net.ipv4.tcp_syn_retries
默认值6,退避累计约 127 秒后放弃
作用范围本机所有主动发起的 TCP 连接,全局生效
配套参数net.ipv4.tcp_synack_retries 是服务端重传 SYN+ACK 的次数
与应用层关系与 connect 超时叠加,实际等待以较小的一方为准
观测方式抓包看 SYN 重传,或借应用侧连接建立耗时定位

典型使用场景

  • 内网微服务调用:下游实例异常时希望快速失败并触发重试或熔断
  • 连接池健康检查:建连长时间挂起会拖慢连接池的检测与补充
  • 压测排除干扰:希望压测结果反映真实处理能力而不是等待超时
  • 排查建连缓慢:抓包确认是否存在 SYN 重传,而不是应用自身阻塞
  • 跨公网调用:链路抖动较多,需要在快速失败与避免误判之间权衡

查看与调整

查看与调整
sysctl net.ipv4.tcp_syn_retries          # 读当前重试次数
sysctl -w net.ipv4.tcp_syn_retries=3     # 临时下调,约 7 秒后放弃
tcpdump -n -i eth0 'tcp[tcpflags] & tcp-syn != 0' | head   # 观察 SYN 与重传
ss -tan state syn-sent | wc -l           # 处于 syn-sent 状态的连接数

落盘与回读

落盘与回读
# /etc/sysctl.d/99-net-tuning.conf
net.ipv4.tcp_syn_retries = 3    # 内网服务常用 2~3,缩短故障暴露时间
# 回读命令:sysctl net.ipv4.tcp_syn_retries

重试次数与等待时间

取值重传次数放弃前累计等待
22 次约 3 秒
33 次约 7 秒
55 次约 63 秒
66 次约 127 秒,默认值
应用层的 connect 超时通常更短,先发生的是应用超时,内核仍在后台重传。因此这个参数主要影响那些没有设置连接超时的客户端,以及内核自身发起的连接。
这是全局参数:下调之后,数据库客户端、消息队列客户端、监控上报等所有出站连接都会更快失败。调整前梳理依赖方的超时与重试语义,避免把网络瞬时的丢包放大成业务失败。

易错点

  • 把它当单机参数理解:全局生效,所有出站连接都受影响,需要按最敏感的业务来取值
  • 调得过小配合弱网络:真实丢包时会被更早判定失败,必须结合业务重试策略评估
  • 与应用超时重复设置互相干扰:先确认哪一层在真正决定放弃时间,再决定改哪里
  • 只改参数不做观测:用抓包或连接建立耗时数据确认重传次数的变化
  • 与 tcp_synack_retries 混淆:服务端方向的行为由另一个参数控制,排查不能张冠李戴

数据来源与参考

  • man 7 tcp(tcp_syn_retries 语义)
  • Linux 内核 Documentation/admin-guide/sysctl/net.rst
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌