> Linux教程 > Linux学习 >

Linux系统报错:kernel:ip_conntrack:table full,dropping

报错原因:
netstat -nat|grep -i “80″|wc -l命令
#netstat -nat|grep -i “80″|wc -l
netstat -an会打印系统当前网络链接状态,而grep -i “80″是用来提取与80端口有关的连接的, wc -l进行连接数统计。
less /proc/net/ip_conntrack |wc -l 统计行数得到已传输包的数量, 下面的方法更简便
cat /proc/sys/net/ipv4/netfilter/ip_conntrack_count 直接查看统计数量,不需要计算/proc/net/ip_conntrack的行数
对于做处于网关地位的机器,其开启了nat功能,那么/proc/net/ip_conntrack是保存的是内网地址和外部地址连接的情况,记录每个连接的详细情况,其内容一般会保持5天,期间重新启动网络并不会有效减少其内容,唯一的办法就是重新启动和增大内存的数量,给监控带来不便,内容很容易满,核心便会报警

处理方法:
1、修改:echo 655360 > /proc/sys/net/ipv4/ip_conntrack_max
     echo 180 > /proc/sys/net/ipv4/netfilter/ip_conntrack_tcp_timeout_established
或修改 /etc/sysctl.conf:
net.ipv4.ip_conntrack_max = 655360
net.ipv4.netfilter.ip_conntrack_tcp_timeout_established = 180
再 sysctl -p 使之生效
2、隔一段时间重新启动系统或防火墙,清空ip_conntrack, 如 service iptables restart;
3、ulimit -n 81920该命令必须以root 运行,仅仅运行在bash shell, 不必重启机器, 重启就失效了。
网速慢与最大连接数是没有直接关系的,可以证明的很多P2P程序大量使用UDP

IP_conntrack 表示连接跟踪数据库(conntrack database),每一个跟踪连接表会占用350字节的内核存储空间,时间一长就会把默认的空间填满,那么默认空间时多少?一般redhat内存为 64MB的机器上时4096,内存为128MB是 8192,内存为256MB是16376

上面是从网上找的资料,下面我要根据我遇到的情况分析了
我们自己的服务器内核已经升级到2.6.30.1了所以解决的情况就不一样了,文件的路径也有变化了
自己报错信息如下:
kernel: nf_conntrack: table full, dropping packet.一直报这样的错误

解决方法:
#echo 1048576 >/proc/sys/net/netfilter/nf_conntrack_max   
#echo 1048576 >/proc/sys/net/nf_conntrack_max
然后写入/etc/rc.local文件里面 保证开机启动后自动生效 (责任编辑:IT)