跟踪超时参数是什么
net.netfilter.nf_conntrack_tcp_timeout_established 决定连接跟踪表中处于 ESTABLISHED 状态的表项能存活多久,默认 432000 秒,也就是 5 天。跟踪表按状态设置不同的超时:刚建立、半开、关闭中等状态各有独立的超时参数,一起决定表项的回收速度。这类参数对 NAT 网关尤其重要:只要表项还在,地址转换关系就保留;表项被清理后,原连接即使还有流量也会被当作新连接处理。
基本信息
| 参数 | net.netfilter.nf_conntrack_tcp_timeout_established |
|---|---|
| 默认值 | 432000 秒(5 天) |
| 同族参数 | tcp_timeout_syn_sent、syn_recv、fin_wait、close、close_wait、last_ack、time_wait 等 |
| 所在位置 | /proc/sys/net/netfilter/ 下,需先加载连接跟踪模块 |
| 伙伴参数 | net.netfilter.nf_conntrack_max 决定表的容量上限 |
| 影响 | 超时越长,空闲连接占用的表项保留越久 |
典型使用场景
- 网关表项长期占用:大量空闲长连接占住容量,需要评估是否缩短超时
- 配合应用心跳:确认应用心跳间隔小于跟踪超时,避免心跳前映射被清理
- NAT 排障:连接在空闲一段时间后失败,怀疑是映射被提前回收
- 容量估算:按并发连接数与超时时间估算表项的平均占用规模
- 多参数协同:关闭阶段的超时同样影响回收速度,需要整体评估
查看与调整
查看与调整
sysctl net.netfilter.nf_conntrack_tcp_timeout_established # 读当前值
ls /proc/sys/net/netfilter/ | grep timeout # 列出全部超时参数
cat /proc/sys/net/netfilter/nf_conntrack_count # 当前表项数
sysctl -w net.netfilter.nf_conntrack_tcp_timeout_established=86400 # 临时改为 1 天
conntrack -L -p tcp 2>/dev/null | head # 需要工具时查看表项详情落盘与回读
落盘与回读
# /etc/sysctl.d/99-conntrack.conf
net.netfilter.nf_conntrack_tcp_timeout_established = 86400 # 缩短空闲长连接占用
net.netfilter.nf_conntrack_tcp_timeout_time_wait = 60 # 关闭阶段超时
# 回读命令:sysctl net.netfilter.nf_conntrack_tcp_timeout_established状态与超时对照
| 状态 | 典型默认值 | 影响 |
|---|---|---|
| established | 5 天 | 长连接表项占用时间,容量压力主要来源 |
| syn_sent / syn_recv | 分钟级 | 握手阶段的表项回收速度 |
| fin_wait / close_wait | 分钟级 | 关闭过程各阶段的残留时间 |
| time_wait | 秒级到分钟级 | 回收快,通常不是容量瓶颈 |
调低超时会让空闲时间较长的连接在应用无感知的情况下失去映射,之后报文可能被当作新连接处理而被拒绝。应用侧有心跳保活的场景,心跳间隔必须明显小于该超时值。
改完之后要用实际数据验证:观察表项数量的变化趋势与业务侧是否出现连接异常,而不是只看参数回读值。验证窗口应覆盖业务的空闲周期,否则难以发现问题。