Linux调整网络超时阈值需按用途区分参数:TCP Keepalive超时应设tcp_keepalive_time=300~600、intvl=20~60、probes=3~5,并显式启用SO_KEEPALIVE;连接建立与关闭超时如tcp_fin_timeout、tcp_tw_reuse等需另配,且所有调参须匹配实际网络设备的空闲清理时限。

Linux 中调整网络超时阈值,核心是通过 sysctl 修改内核网络参数。不同超时类型对应不同参数,不能一概而论设成“统一值”,必须按用途区分:TCP 连接保活、连接建立、连接关闭、路由转发等各有其关键参数。
TCP Keepalive 超时(防空闲断连)
这是长连接最常遇到的超时问题——NAT 或防火墙在 5–10 分钟无流量后静默切断连接。内核默认 tcp_keepalive_time=7200(2 小时),远超中间设备容忍极限。
-
net.ipv4.tcp_keepalive_time:空闲多久发第一个探测包。建议设为 300~600(5~10 分钟),必须小于你链路中最短的空闲清理时限 -
net.ipv4.tcp_keepalive_intvl:探测失败后重试间隔。建议 20~60,太小易被当成扫描,太大响应滞后 -
net.ipv4.tcp_keepalive_probes:连续失败几次判定断连。建议 3~5;设为 0 禁用探测,设为 1 容易因单次丢包误断
⚠️ 注意:这三个参数只定义“怎么探”,但每个 socket 默认不启用 Keepalive。应用层必须显式调用
setsockopt(..., SO_KEEPALIVE, &on, ...),否则内核根本不发探测包。可用ss -ti查看某连接是否有keepalive字样确认是否生效。
TCP 连接建立与关闭超时(短连接场景)
适用于 HTTP API、微服务调用等高频建连/断连场景:
-
net.ipv4.tcp_syn_retries:客户端 SYN 重传次数,默认 6(约 127 秒超时)。可减至 3~4 缩短建连失败等待时间 -
net.ipv4.tcp_fin_timeout:TIME_WAIT 状态保持时间,默认 60 秒。短连接密集服务可设为 30,加快端口回收 -
net.ipv4.tcp_fin_timeout配合net.ipv4.tcp_tw_reuse=1(仅对客户端出站连接有效),能显著缓解端口耗尽
TCP 数据传输与拥塞控制相关超时
影响大流量、高延迟链路下的恢复行为:
-
net.ipv4.tcp_retries1:从 ESTABLISHED 进入超时重传前的探测次数,默认 3。一般不需改 -
net.ipv4.tcp_retries2:彻底放弃连接前的最大重传次数,默认 15(约 13~30 分钟)。若业务要求快速失败,可降至 8~10 -
net.ipv4.tcp_slow_start_after_idle=0:禁用空闲后慢启动,避免长连接空闲后吞吐骤降
其他网络层超时控制
-
net.ipv4.ip_forward_use_pmtu:控制转发路径 MTU 发现行为,影响分片与超时判断,一般保持默认 0 -
net.ipv4.icmp_echo_ignore_all/net.ipv4.icmp_echo_ignore_broadcasts:虽非“超时”,但影响 ICMP 探测反馈,间接影响故障发现时效
临时修改示例(重启失效):
sudo sysctl -w net.ipv4.tcp_keepalive_time=300 sudo sysctl -w net.ipv4.tcp_keepalive_intvl=30 sudo sysctl -w net.ipv4.tcp_keepalive_probes=5 sudo sysctl -w net.ipv4.tcp_fin_timeout=30 sudo sysctl -w net.ipv4.tcp_tw_reuse=1
永久生效:写入 /etc/sysctl.d/99-network-timeout.conf,再运行 sudo sysctl --system 加载。
调参不是越激进越好。关键是匹配你实际所处网络环境的瓶颈点——比如云厂商 SLB 通常 5 分钟清空闲连接,那就把 keepalive time 设为 300;家用光猫可能只撑 3 分钟,就得设成 180。不匹配的设置反而增加无效探测或延长故障感知时间。


















