早上接到报警发现机器web访问不正常,ping也丢包很严重,登录查看/var/log/message发现大量如下记录:
Aug 10 07:43:01 localhost kernel: printk: 2059 messages suppressed.
Aug 10 07:43:01 localhost kernel: ip_conntrack: table full, dropping packet.
Aug 10 07:43:06 localhost kernel: printk: 2169 messages suppressed.
Aug 10 07:43:06 localhost kernel: ip_conntrack: table full, dropping packet.
Aug 10 07:43:11 localhost kernel: printk: 1996 messages suppressed.
Aug 10 07:43:11 localhost kernel: ip_conntrack: table full, dropping packet.
Aug 10 07:43:16 localhost kernel: printk: 2130 messages suppressed.
Aug 10 07:43:16 localhost kernel: ip_conntrack: table full, dropping packet.
Aug 10 07:43:21 localhost kernel: printk: 2285 messages suppressed.
Aug 10 07:43:21 localhost kernel: ip_conntrack: table full, dropping packet.
 
在网上查看了一下资料,发现如下:
 ip_conntrack表的最大值由参数ip_conntrack_max控制,查看当前设置的最大值可通过命令:
 cat /proc/sys/net/ipv4/ip_conntrack_max,redhat默认大小是65536,这个值的大小是有机器的内存决定的,65536是1G内存的大小,如果你的内存不止1G,那么设置的数值大小就是65536的倍数。2G是131072,4G是262144。数值可以比当前内存可设置的最大值小,但是不能超过最大值,要不然设置之后是不生效的。
 
要查看当前系统ip_conntrack的大小可以通过命令:
cat /proc/sys/net/ipv4/netfilter/ip_conntrack_count
 
 
设置方法如下:
方式一:
echo 131072 >/proc/sys/net/ipv4/ip_conntrack_max
要实现每次开机后都生效的话,要加到开机启动脚本/etc/rc.local里,其他开机自动运行的脚本也行。
方式二:
echo 'net.ipv4.ip_conntrack_max=131072'  >> /etc/sysctl.conf
sysctl -p 
这样每次开机都能自动设置该参数