nf_conntrack: table full, dropping packet

来源:互联网 发布:青年网络公开课全集 编辑:程序博客网 时间:2024/05/16 16:07

这几天发现网站打开很慢,查看带宽也够,服务器也没有任何负载.

从/var/log/messages发现如下错误

Sep 20 16:10:14 localhost Keepalived_vrrp[870]: VRRP_Instance(VI_1) Sending gratuitous ARPs on eth1 for 1.1.1.1
Sep 20 16:10:14 localhost Keepalived_healthcheckers[869]: Netlink reflector reports IP 1.1.1.1 added
Sep 20 16:10:15 localhost kernel: __ratelimit: 1769 callbacks suppressed
Sep 20 16:10:15 localhost kernel: nf_conntrack: table full, dropping packet.
Sep 20 16:10:15 localhost kernel: nf_conntrack: table full, dropping packet.
Sep 20 16:10:15 localhost kernel: nf_conntrack: table full, dropping packet.
Sep 20 16:10:15 localhost kernel: nf_conntrack: table full, dropping packet.
Sep 20 16:10:15 localhost kernel: nf_conntrack: table full, dropping packet.
Sep 20 16:10:15 localhost kernel: nf_conntrack: table full, dropping packet.
Sep 20 16:10:15 localhost kernel: nf_conntrack: table full, dropping packet.
Sep 20 16:10:15 localhost kernel: nf_conntrack: table full, dropping packet.
Sep 20 16:10:15 localhost kernel: nf_conntrack: table full, dropping packet.
Sep 20 16:10:15 localhost kernel: nf_conntrack: table full, dropping packet.

解决办法如其所述,对ip_conntrack的两个参数进行设置即可:

 vi /etc/sysctl.conf
net.nf_conntrack_max = 655360
net.netfilter.nf_conntrack_tcp_timeout_established = 1200


#默认超时时间为5天,作为一个主要提供HTTP服务的服务器来讲,完全可以设置得比较短
sysctl -p /etc/sysctl.conf

果然有效。

ip_conntrack就是linux NAT的一个跟踪连接条目的模块,ip_conntrack模块会使用一个哈希表记录 tcp 通讯协议的 established connection记录,当这个哈希表满了的时候,便会导致nf_conntrack: table full, dropping packet错误。

关于如何优化conntrack模块,有一篇文章对此进行了解释,http://wiki.khnet.info/index.php/Conntrack_tuning,或http://blog.yorkgu.me/wp-content/uploads/2012/02/netfilter_conntrack_perf-0.8.txt

查看目前 ip_conntrack buffer 的使用状况
cat /proc/slabinfo |grep conntrack

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

cat /proc/net/ip_conntrack | cut -d ' ' -f 10 | cut -d '=' -f 2 | sort | uniq -c | sort -nr | head -n 10

修改可以文件数目最大方法:

修改/etc/security/limits.conf
里面有很详细的注释,比如
* soft   nofile   32768
* hard nofile 65536
就可以将文件句柄限制统一改成软32768,硬65536。配置文件最前面的是指domain,设置为星号代表全局,另外你也可以针对不同的用户做出不同的限制。

注意:这个当中的硬限制是实际的限制,而软限制,是warnning限制,只会做出warning;其实ulimit命令本身就有分软硬设置,加-H就是硬,加-S就是软
默认显示的是软限制,如果运行ulimit命令修改的时候没有加上的话,就是两个参数一起改变。


0 0
原创粉丝点击