首页/网络/抓包与流量分析速查/连接跟踪表满引发丢包
丢包与时延定位60 条

连接跟踪表满引发丢包

nf_conntrack 表满时新连接被丢弃并记录 drop 计数:症状是分布式的"偶发新建失败",而既有连接正常。

跟踪表满引发的丢包

连接跟踪模块会为每条经过的连接维护一条状态记录,记录条数的上限由内核参数控制。当记录数触顶时,新连接无法建立跟踪条目而被直接丢弃,同时在统计与内核日志里留下痕迹。这类故障的症状很有辨识度:既有连接一切正常,新建连接却偶发失败,而且失败在流量高峰更集中。高并发的短连接场景,比如代理节点与网关节点,最容易触顶。

基本信息

适用平台Linux netfilter 连接跟踪
查看命令conntrack -C、conntrack -S、sysctl 查看当前值与上限
日志线索内核日志中出现跟踪表已满的提示
高发场景高并发短连接的代理与网关节点

典型使用场景

  • 新连接偶发失败而旧连接正常,确认是否为跟踪表容量问题
  • 压测中定位失败集中在高峰时段的原因
  • 扩容或调整上限前评估当前用量与增长趋势
  • 排查是否存在连接泄漏导致记录数持续不降
  • 为超时参数调整提供依据
  • 为网关类节点的容量规划提供实测数据

核对步骤

核对步骤
sysctl net.netfilter.nf_conntrack_count net.netfilter.nf_conntrack_max
conntrack -C                                # 当前跟踪记录数
conntrack -S | grep drop                    # 丢弃计数
dmesg | grep -i 'nf_conntrack: table full'  # 内核日志中的触顶提示
# 触及上限且高峰时段丢弃增长 → 容量瓶颈已成立

观察项逐项读法

观察项含义判读方向
当前记录数已占用的跟踪条目接近上限即为容量风险
记录上限可容纳的最大条目数需与内存预算一起评估
丢弃计数因表满被丢的连接持续增长说明容量不足
内核日志提示表满的直接证据出现即可确认为该类问题
扩容前先查是否存在连接泄漏:长时间不释放的连接会让记录数居高不下,只调大上限只是延后复发。
上限抬高会增加内存占用,需要与连接超时参数一并评估,避免为了容量付出过高的内存代价。

易错点

  • 一上来就调大上限:若根因是连接泄漏,容量很快又会被占满
  • 忽略超时参数:跟踪记录释放慢会持续占用条目,与上限调整必须一起评估
  • 只看当前数值不看增长趋势:缺少趋势就无法判断何时触顶,容量规划会滞后
  • 把新连接失败归因于链路:既有连接正常这一特征本身就指向跟踪表,不宜绕过它去查网络

数据来源与参考

  • Linux netfilter 文档
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌