linux服务器nf_conntrack表满导致连接超时、502和ssh卡死,应立即执行三步止血:临时扩容conntrack_max与buckets参数,再清理invalid/unreplied状态条目。

Linux服务器突然出现大量连接超时、502错误或SSH卡死,同时dmesg日志持续刷出nf_conntrack: table full, dropping packet——这表示内核连接跟踪表已耗尽,新TCP握手包被静默丢弃,业务流量实际已被拦截在协议栈最底层。
秒级止血:临时扩容+安全清理
别等、别重启、别查代码,先让业务恢复。当前连接状态仍在,但新SYN包进不来,必须立刻干预:
执行临时扩容(按32GB内存推荐值):sudo sysctl -w net.netfilter.nf_conntrack_max=524288
同步调整哈希桶数量,否则扩容后冲突加剧反而更慢:sudo sysctl -w net.netfilter.nf_conntrack_buckets=131072
只删无效条目,不中断现有ESTABLISHED连接:sudo conntrack -D --state INVALID,UNREPLIED
这一步操作起来很简单,直接运行三行命令,通常1–3秒内丢包就停止。注意:conntrack -F会清空全部状态,导致SNAT/DNAT失效、客户端重连风暴,【生产环境严禁直接使用】
精准定位:查清谁占满了表
表满极少是单纯流量大,多是连接滞留、异常扫描或健康检查失控。必须用实时数据说话:
第一步:确认是否真满——运行conntrack -C,若输出值≥cat /proc/sys/net/netfilter/nf_conntrack_max,就是瓶颈。
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
第二步:揪出高频源IP(常为爬虫或配置错误的监控探针):
conntrack -L | awk '{print $7}' | cut -d= -f2 | sort | uniq -c | sort -nr | head -10
第三步:看状态分布,识别TIME_WAIT或UNREPLIED堆积:
conntrack -L | awk '{print $4}' | sort | uniq -c | sort -nr
第四步:查目的端口集中度,判断是否某服务异常(如DNS放大、HTTP短连接风暴):
conntrack -L | grep "dport=" | awk '{print $10}' | sort | uniq -c | sort -nr | head -10
永久调优:写入配置+绕过无关流量
临时设置在重启或模块重载后失效,必须落盘生效:
方法一:写入sysctl.conf并重载
echo "net.netfilter.nf_conntrack_max = 524288" >> /etc/sysctl.conf
echo "net.netfilter.nf_conntrack_buckets = 131072" >> /etc/sysctl.conf
echo "net.netfilter.nf_conntrack_tcp_timeout_established = 3600" >> /etc/sysctl.conf
echo "net.netfilter.nf_conntrack_tcp_timeout_time_wait = 60" >> /etc/sysctl.conf
sudo sysctl -p
方法二:对本机通信跳过跟踪(避免lo接口无谓消耗)
sudo iptables -t raw -A PREROUTING -i lo -j NOTRACK
sudo iptables -t raw -A OUTPUT -o lo -j NOTRACK
方法三:禁用非必要ALG模块(如未用FTP/SIP,可彻底屏蔽其连接跟踪)
echo 'install nf_conntrack_ftp /bin/true' >> /etc/modprobe.d/blacklist.conf
echo 'install nf_conntrack_sip /bin/true' >> /etc/modprobe.d/blacklist.conf










