CentOS ip_conntrack: table full, dropping packet 的解决方法

2020-01-30 13:10:10丽君
那么,为什么会出现 ip_conntrack: table full, dropping packet 呢?iptables 使用一张连接跟踪表,来描述连接状态,当这张表满了,就会在日志里面写入该信息。这可能有点难以理解,那么到底在什么情况下,我们需要在日志里面查找这条记录呢?

当你发现,PING 服务器的结果,出现丢包,或者出现延迟不稳定,忽高忽低,在排除线路因素之后,就应当考虑 ip_conntrack: table full, dropping packet 。

下面介绍 ip_conntrack: table full, dropping packet 的解决方法:

CentOS 6 /RHEL 5 下的解决方法:

1.运行


复制代码sysctl -w net.ipv4.netfilter.ip_conntrack_max=100000.sysctl -w net.ipv4.netfilter.ip_conntrack_max=100000

2.在 /etc/sysctl 中加入:


复制代码net.ipv4.netfilter.ip_conntrack_max = 100000.net.ipv4.netfilter.ip_conntrack_max = 100000

3.使其生效:


复制代码sysctl -p.sysctl -p

CentOS 6 /RHEL 6 下的解决方法:

1.运行


复制代码sysctl -w net.nf_conntrack_max=100000.sysctl -w net.nf_conntrack_max=100000

2.在 /etc/sysctl 中加入:


复制代码net.nf_conntrack_max = 100000.net.nf_conntrack_max = 100000

3.使其生效:


复制代码sysctl -p.sysctl -p

*** 如果 Xen DomU 出现零星丢包或者 PING 忽高忽低,同时关闭 iptables 后 ping 正常,则多半是这个问题。

或参考下面的方法试试

一。服务器出现了大量的丢包现象,通过查看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 “” > /proc/sys/net/ipv4/ip_conntrack_max
# 然后写入
/etc/sysctl.conf
net.ipv4.ip_conntrack_max =


有两点我们要注意.

-conntrack最大数量.叫做conntrack_max
-存储这些conntrack的hash表的大小,叫做hashsize
当conntrack入口数大于conntrack_max时,在hash表中每一个conntrack list中的存储的入口将不可控.(conntrack_mark/hashsize 为每个list所能存储的入口的数量)
hash表存在于固定的的不可swap的内存中. conntrack_mark决定占用多少这些不可swap的内存.
缺省的hashsize
——————————–
conntrack_max=hashsize*8
i386中 hashsize=conntrack_max/8=ramsize(in bytes)/131072=ramsize(in MegaBytes)*8.
所以32位pc,512M内存可以存512*1024^2/128/1024=512*8=4096(连接池list)