ip_conntrack: table full, dropping packet 解决方法

查看message出现了下面的错误:
kernel:ip_conntrack:table full,dropping packet

通过网上查找资料,找到了解决的方法:

显示当前的会话数:
cat /proc/net/ip_conntrack | wc -l
显示系统目前配置的最大 conntrack 数:
cat /proc/sys/net/ipv4/ip_conntrack_max
# 一旦前者的数字大于后者时,系统就报错,解决办法:
echo 81920<some_bigger_number> > /proc/sys/net/ipv4/ip_conntrack_max
# 然后写入 /etc/sysctl.conf

sys.net.ipv4.ip_conntrack_max = 81920

ip_conntrack: table full, dropping packet

ip_conntip_conntrack模块默认的链接超时时间是432000 单位/秒
net.ipv4.ip_conntrack_max 最大net.ipv4.ip_conntrack是根据内存大小划分的。

调整系统内核
vi /etc/sysctl.conf
net.ipv4.ip_conntrack_max = 81920
net.ipv4.netfilter.ip_conntrack_tcp_timeout_established = 1500

最近一个web系统经常报出如下日志信息:
Apr 17 16:37:26 www kernel: printk: 135 messages suppressed.
Apr 17 16:37:26 www kernel: ip_conntrack: table full, dropping packet.
Apr 17 16:37:26 www kernel: ip_conntrack: table full, dropping packet.
Apr 17 16:37:33 www kernel: printk: 139 messages suppressed.
Apr 17 16:37:33 www kernel: ip_conntrack: table full, dropping packet.
Apr 17 16:37:37 www kernel: printk: 60 messages suppressed.
Apr 17 16:37:37 www kernel: ip_conntrack: table full, dropping packet.
Apr 17 16:37:52 www kernel: printk: 19 messages suppressed.
Apr 17 16:37:52 www kernel: ip_conntrack: table full, dropping packet.

有丢包现象,应该是系统内核屏蔽了网卡功能,此时系统对外表现为连接时通时断,接着执行如下操作:
[root@web ~]# cat /proc/sys/net/ipv4/netfilter/ip_conntrack_max

65536针对这个问题,可调整以下参数:

echo 180 >/proc/sys/net/ipv4/netfilter/ip_conntrack_tcp_timeout_established 
echo 6553600 >/proc/sys/net/ipv4/netfilter/ip_conntrack_max 
echo 120 >/proc/sys/net/ipv4/neigh/default/gc_stale_time 
echo 10240 >/proc/sys/net/ipv4/neigh/default/gc_thresh1 
echo 40960 >/proc/sys/net/ipv4/neigh/default/gc_thresh2 
echo 81920 >/proc/sys/net/ipv4/neigh/default/gc_thresh3 

vi /etc/sysctl.conf

net.ipv4.ip_conntrack_max=6553600 
net.ipv4.netfilter.ip_conntrack_max=6553600 
net.ipv4.netfilter.ip_conntrack_tcp_timeout_time_wait=120 
net.ipv4.netfilter.ip_conntrack_tcp_timeout_close_wait=60 
net.ipv4.netfilter.ip_conntrack_tcp_timeout_fin_wait=120 
net.ipv4.neigh.default.gc_thresh1=10240 
net.ipv4.neigh.default.gc_thresh2=40960 
net.ipv4.neigh.default.gc_thresh3=81920 
net.core.rmem_default = 2097152 
net.core.rmem_max=16777216 
net.core.wmem_max=16777216 
net.core.wmem_default = 2097152 

再sysctl -p相关参数说明:ARP支持一个sysctl接口,可以用以配置全局参数或逐个网络接口地进行配制。该sysctl可以通过

/proc/sys/net/ipv4/neigh/*/*

文件或者使用

sysctl

(2)接口来访问。系统中每个接口都在/proc/sys/net/ipv4/neigh/.中有自己的目录。`default’目录中的设置用于所有新建的设备。sysctl相关的时间是以秒为单位,除非特别声明过.

anycast_delay

对IPv6相邻请求信息的回复的最大延迟时间;目前还不支持anycast。缺省值为1秒。

app_solicit

这是在使用多路广播探测(multicast probe)前,经过网络连接送到用户间隙ARP端口监控程序的探测(probe)最大数目(见mcast_solicit)。缺省值为0。

base_reachable_time

一旦发现相邻记录,至少在一段介于base_reachable_time/2和3*base_reachable_time/2之间的随机时间内,该记录是有效的。如果收到上层协议的肯定反馈,那么记录的有效期将延长。缺省值是30秒。

delay_first_probe_time

发现某个相邻层记录无效(stale)后,发出第一个探测要等待的时间。缺省值是5秒。

gc_interval

收集相邻层记录的无用记录的垃圾收集程序的运行周期,缺省为30秒。

gc_stale_time

决定检查一次相邻层记录的有效性的周期。当相邻层记录失效时,将在给它发送数据前,再解析一次。缺省值是60秒。

gc_thresh1

存在于ARP高速缓存中的最少层数,如果少于这个数,垃圾收集器将不会运行。缺省值是128。

gc_thresh2

保存在ARP高速缓存中的最多的记录软限制。垃圾收集器在开始收集前,允许记录数超过这个数字5秒。缺省值是512。

gc_thresh3

保存在ARP高速缓存中的最多记录的硬限制,一旦高速缓存中的数目高于此,垃圾收集器将马上运行。缺省值是1024。

locktime

ARP记录保存在高速缓存内的最短时间(jiffy数),以防止存在多个可能的映射(potential mapping)时,ARP高速缓存系统的颠簸(经常是由于网络的错误配置而引起)。缺省值是1秒。

mcast_solicit

在把记录标记为不可抵达的之前,用多路广播/广播(multicast/broadcast)方式解析地址的最大次数。

缺省值是3。

proxy_delay

当接收到有一个请求已知的代理ARP地址的ARP请求时,在回应前可以延迟的jiffy(时间单位,见BUG)数目。这样,以防止网络风暴。缺省值是0.8秒。

proxy_qlen

能放入代理ARP地址队列(proxy-ARP addresses)的数据包最大数目。缺省值是64。

retrans_time

重发一个请求前的等待jiffy(时间单位,见BUG)的数目。缺省值是1秒。

ucast_solicit

询问ARP端口监控程序前,试图发送单探测(unicast probe)的次数。(见app_solicit).缺省值是3秒。

unres_qlen

每个没有被其它网络层解析的地址,在队列中可存放包的最大数目。缺省值是3.

发表评论