参数是什么
net.netfilter.nf_conntrack_tcp_timeout_established 决定已建立连接的表项在无流量情况下保留多久,默认 432000 秒(5 天)。这个默认值对存在大量「实际已断开但未正常关闭」连接的场景很不友好——客户端异常退出或中间设备静默丢包时,表项会被长期占用,最终把跟踪表填满。按业务真实的连接模式把它调小(例如几小时到一天)是常见的治理手段。
基本信息
| 参数 | net.netfilter.nf_conntrack_tcp_timeout_established |
|---|---|
| 默认值 | 432000 秒(5 天) |
| 同族超时 | tcp_timeout_time_wait(默认 120 秒)、fin_wait(120)、close(10)等 |
| 辅助查看 | conntrack -C 查看表项数(需 conntrack-tools) |
| 持久化 | 写入 /etc/sysctl.d/*.conf 后 sysctl --system |
| 生效方式 | 对新表项立即生效,存量表项按扫描周期逐步回收 |
典型使用场景
- 连接跟踪表项数长期偏高,需要从回收速度入手治理
- NAT 网关与负载均衡的表容量规划
- 客户端异常断开导致表项残留,长期占用容量
- 容器环境中大量短连接场景的资源回收优化
- 与 time_wait 等超时配合,整体加快无活动表项的清理
查看与调整
查看与调整
sysctl net.netfilter.nf_conntrack_tcp_timeout_established # 查看当前值
sysctl -a 2>/dev/null | grep nf_conntrack_tcp_timeout | head # 看全部 TCP 相关超时
sudo sysctl -w net.netfilter.nf_conntrack_tcp_timeout_established=86400 # 临时改为 1 天
conntrack -C 2>/dev/null # 查看当前表项数量(需 conntrack-tools)
printf 'net.netfilter.nf_conntrack_tcp_timeout_established = 86400\n' > /etc/sysctl.d/90-conntrack.conf
sysctl --system # 重新加载并复核回显相关超时对照
| 参数 | 默认值 | 作用 |
|---|---|---|
| tcp_timeout_established | 432000 秒 | 无流量的已建立连接保留时长 |
| tcp_timeout_time_wait | 120 秒 | TIME_WAIT 状态表项保留时长 |
| tcp_timeout_fin_wait | 120 秒 | FIN_WAIT 状态保留时长 |
| tcp_timeout_close | 10 秒 | CLOSE 状态保留时长 |
调整不会立即清空存量表项:新表项按新值计时,老表项仍需等扫描周期回收。执行后 conntrack -C 不会马上下降,不要据此判断改动无效。
取值必须与业务连接模式匹配:如果设得比心跳或保活周期还短,长连接的表项可能在连接仍存活时被回收,导致跟踪状态丢失,引发重连或流量被当成新连接处理。
定值的实操口径:先统计业务连接的空闲时长分布(结合 conntrack -C 与表项明细观察),取值略大于「最长空闲但仍需要保留的连接」即可,超出这段时间的表项本质上都是在浪费表容量。