早上接到报警发现机器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
设置方法如下:

编辑# vim /etc/sysctl.conf

在最后面添加两句句

net.ipv4.ip_conntrack_max = 458752

net.ipv4.netfilter.ip_conntrack_tcp_timeout_established = 180


解释:net.ipv4.netfilter.ip_conntrack_tcp_timeout_established = 180这句是清理缓存的时间,默认是5天,太长了