0

0

conntrack 表满导致新连接失败但业务日志无异常的定位顺序

冷漠man

冷漠man

发布时间:2026-01-23 19:46:02

|

884人浏览过

|

来源于php中文网

原创

conntrack表满会导致新TCP/UDP连接被内核静默丢弃,不发RST或SYN-ACK,应用层无错误感知;需按顺序排查:1.检查nf_conntrack_count与max是否超90%;2.分析conntrack状态分布与IP:端口热点;3.关联业务变更、SNAT、iptables规则及K8s配置;4.抓包验证并临时调高上限确认根因。

conntrack 表满导致新连接失败但业务日志无异常的定位顺序

conntrack 表满时,新 TCP/UDP 连接会被内核直接丢弃(不发 RST,也不 SYN-ACK),因此上层应用收不到错误、超时重试后可能静默失败,业务日志完全无异常。定位需从网络层向下排查,顺序如下:

1. 确认 conntrack 表是否已满

执行命令查看当前使用量和上限:

  • cat /proc/sys/net/netfilter/nf_conntrack_count —— 当前 tracked 连接数
  • cat /proc/sys/net/netfilter/nf_conntrack_max —— 表容量上限
  • 若 count 接近或等于 max(例如 >90%),即为瓶颈点
  • 补充:用 conntrack -L | wc -l 可交叉验证,但较慢,生产环境慎用

2. 查看 conntrack 表项分布特征

判断是连接泄漏、短连接洪峰,还是特定协议/端口堆积:

抖云猫AI论文助手
抖云猫AI论文助手

一款AI论文写作工具,最快 2 分钟,生成 3.5 万字论文。论文可插入表格、代码、公式、图表,依托自研学术抖云猫大模型,生成论文具备严谨的学术专业性。

下载
  • conntrack -S —— 查看各状态计数(如 expected、invalid、unreplied)
  • conntrack -L | awk '{print $3,$5}' | sort | uniq -c | sort -nr | head -10 —— 统计最多的源 IP+目标端口组合
  • 重点关注:TIME_WAIT 占比过高(常见于大量短连接未复用)、UNREPLIED 持续增长(连接发起后无响应,如后端不可达或防火墙拦截)

3. 关联业务行为与网络路径

conntrack 满不是孤立现象,需结合流量变化和组件配置分析:

  • 检查近期是否有发布、定时任务、爬虫、健康检查变更(如探针频率从 30s 改为 2s)
  • 确认是否启用了 SNAT(如 K8s Service、NAT 网关)—— SNAT 会强制创建 conntrack 条目,且无法被客户端主动清理
  • 检查 iptables/nftables 规则中是否误加了 -m state --state NEW-m conntrack 相关规则,导致额外跟踪开销
  • 容器环境重点看 kube-proxy 模式(iptables vs ipvs)及 conntrack 相关 annotation(如 service.beta.kubernetes.io/topology-aware-hints 间接影响)

4. 验证是否为根本原因并临时缓解

避免“看起来像”实则误判:

  • 在问题时段抓包(tcpdump -i any port 80 or port 443 -n),观察客户端 SYN 是否发出、服务端是否回复 SYN-ACK;若客户端发了 SYN 但无任何回包,且 conntrack 已满,则高度相关
  • 临时调高上限测试:echo 131072 > /proc/sys/net/netfilter/nf_conntrack_max(注意需同步调整 net.nf_conntrack_buckets,一般为 max 的 1/4)
  • 观察调高后问题是否消失;若仍存在,说明有其他瓶颈(如 socket 耗尽、SYN queue overflow

相关专题

更多
python中print函数的用法
python中print函数的用法

python中print函数的语法是“print(value1, value2, ..., sep=' ', end=' ', file=sys.stdout, flush=False)”。本专题为大家提供print相关的文章、下载、课程内容,供大家免费下载体验。

185

2023.09.27

counta和count的区别
counta和count的区别

Count函数用于计算指定范围内数字的个数,而CountA函数用于计算指定范围内非空单元格的个数。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

198

2023.11.20

sort排序函数用法
sort排序函数用法

sort排序函数的用法:1、对列表进行排序,默认情况下,sort函数按升序排序,因此最终输出的结果是按从小到大的顺序排列的;2、对元组进行排序,默认情况下,sort函数按元素的大小进行排序,因此最终输出的结果是按从小到大的顺序排列的;3、对字典进行排序,由于字典是无序的,因此排序后的结果仍然是原来的字典,使用一个lambda表达式作为key参数的值,用于指定排序的依据。

387

2023.09.04

堆和栈的区别
堆和栈的区别

堆和栈的区别:1、内存分配方式不同;2、大小不同;3、数据访问方式不同;4、数据的生命周期。本专题为大家提供堆和栈的区别的相关的文章、下载、课程内容,供大家免费下载体验。

393

2023.07.18

堆和栈区别
堆和栈区别

堆(Heap)和栈(Stack)是计算机中两种常见的内存分配机制。它们在内存管理的方式、分配方式以及使用场景上有很大的区别。本文将详细介绍堆和栈的特点、区别以及各自的使用场景。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

574

2023.08.10

overflow什么意思
overflow什么意思

overflow是一个用于控制元素溢出内容的属性,当元素的内容超出其指定的尺寸时,overflow属性可以决定如何处理这些溢出的内容。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

1748

2024.08.15

Golang云原生微服务Kubernetes_Golang怎么集成Kubernetes开发云原生服务
Golang云原生微服务Kubernetes_Golang怎么集成Kubernetes开发云原生服务

Golang云原生微服务Kubernetes (K8s) 是指 使用 Go 语言(Golang)编写的云原生微服务,并利用 Kubernetes 平台进行容器化部署、自动化管理、弹性伸缩和高效编排的一整套现代应用架构方案。

27

2025.12.22

tcp和udp的区别
tcp和udp的区别

TCP和UDP的区别,在连接性、可靠性、速度和效率、数据报大小以及适用场景等方面。本专题为大家提供tcp和udp的区别的相关的文章、下载、课程内容,供大家免费下载体验。

119

2023.07.25

c++空格相关教程合集
c++空格相关教程合集

本专题整合了c++空格相关教程,阅读专题下面的文章了解更多详细内容。

0

2026.01.23

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Linux网络安全之防火墙技术汇总
Linux网络安全之防火墙技术汇总

共31课时 | 3万人学习

Node.js 教程
Node.js 教程

共57课时 | 9.2万人学习

CSS3 教程
CSS3 教程

共18课时 | 4.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号