Web访问超时且系统日志打印:nf_conntrack: table full, dropping packet 本文介绍如何处理“访问Web时超时且系统日志打印kernel: nfconntrack: table full, dropping packet”故障。当您出现类似问题时可参考本文。 故障描述 客户端访问Web时出现超时(time out);服务端的系统日志/var/log/messages打印“kernel: nfconntrack: table full, dropping packet”。 故障原因 iptables的connectiontracking模块使用一部分系统内存来跟踪表中的连接。系统日志打印的“nfconntrack: table full, dropping packet”表明连接跟踪表conntrack已满,无法为新连接创建条目并记录跟踪,进而出现“dropping packet”丢包问题。 解决步骤 解决方案是为连接跟踪表增加条目容量。 CentOS 6系列操作系统解决步骤 1. 查看连接跟踪表conntrack的容量参数nfconntrackmax。执行以下命令: sysctl net.netfilter.nfconntrackmax 2. 检查当前跟踪的连接数参数,如果该值达到nfconntrackmax值则会出现丢包现象。执行以下命令: cat /proc/sys/net/netfilter/nfconntrackcount 3. 增加连接跟踪表的容量参数(以内存为64G,net.netfilter.nfconntrackmax值2097152为例)。 4. 执行以下命令,使配置即时生效。 sysctl w net.netfilter.nfconntrackmax2097152 5. 执行以下命令,确保系统重启后配置仍生效。 echo "net.netfilter.nfconntrackmax 2097152" >> /etc/sysctl.conf 6. 如果conntrack表中容量显著增加,则还应增加存储conntrack的哈希表大小以提高效率。CentOS 6及以上版本中,计算公式是hashsize conntrackmax/4。设置哈希大小,执行以下命令: echo "options nfconntrack expecthashsize524288 hashsize524288" >> /etc/modprobe.conf 7. 重启iptables,执行以下命令: service iptables restart