您的位置:首页 > 运维架构

kernel nf_conntrack: table full, dropping packet 解决办法

2014-10-21 10:53 267 查看
今天通过zabbix监控发现,有一台服务器出现网络不稳定,zabbix图像断流,随之,登录服务器经过排查,发现/var/log/messages中出现大量kernel nf_conntrack: table full, dropping packet 。
解决方法如下。
对ip_conntrack的两个参数进行设置即可,不过在centos上,需要这样设置: centos5
如果在执行sysctl -p 时提示错误 unknown key,那么表示内核版本比较高,参数名称已经改为 centos6
至于为什么会有这样的设置,这个设置的作用是什么,就要从NAT说起了。NAT(Network Address Translation,网络地址转换)是将IP数据报报头的IP地址转化成另外一个IP地址的过程,主要用来实现局域网内的机器访问公共网络(俗称外网)的功能。公共IP地址是指在因特网上全球唯一的IP地址,RFC 1918协议还为局域网预留出了三个IP不会在公网上进行分配的地址块:10.0.0.0~10.255.255.255

172.16.0.0~172.31.255.255

192.168.0.0~192.168.255.255

这些IP地址就可以用来分配给局域网上的各种设备,这些设备在访问外网时,就需要通过一台NAT服务器进行路由转换,通常情况下,路由器就兼备了这样一个功能。除了路由器,也可以配置linux服务器实现NAT功能。ip_conntrack就是linux NAT的一个跟踪连接条目的模块,ip_conntrack模块会使用一个哈希表记录 tcp 通讯协议的 established connection记录,当这个哈希表满了的时候,便会导致nf_conntrack: table full, dropping packet错误。关于如何优化conntrack模块,有一篇文章对此进行了解释,Netfilter conntrack performance tweaking, v0.8,为了访问方便,我这里也留一个备份地址 netfilter_conntrack_perf-0.8.txt

查看目前 ip_conntrack 配置的值

查看目前 ip_conntrack buffer 的使用状况

其中各个数字的含义为:

查出目前 ip_conntrack 记录最多的前十名 IP

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息