首页 > Linux系统管理 > linux内核性能调优ip_conntrack
2015
07-31

linux内核性能调优ip_conntrack

 
track是跟踪的意思。ip_conntrack是跟踪connect的Linux机制。
Linux内核的ip_conntrack模块会记录每一个tcp数据包的estiablished,timewait,syn_recv等状态。并且默认的timeout是432000秒(五天时间)。系统所能记录的ip_conntrack也是有限的,如果超过了这个限度,就会出现内核级错误“ip_conntrack: table full, dropping packet”,其结果就是无法再有任何的网络连接了。
 
 
上面这个问题我在使用iptables做NAT时遇到过,每个ip_conntrack记录约会占用292Bytes的内存,但是内核态即便只能用1G内存(32bit系统),也足够支持很大的连接,所以瓶颈不在这里。显然问题跟iptables和nf_conntrack有关。对于NAT以外的其他TCP连接也会有类似的问题,因为原理是一样的。iptables规则的state参数就是指定记录连接状态的。另外一些调优过的操作系统的iptables启动脚本是不加载ip_conntrack或nf_conntrack模块的,或者干脆从系统删除了这个模块。对于常规的业务运行无影响。如果启用了conntrack,要如何调优呢?
 
仅供参考的解决办法:主要是改下面三个值
cat /proc/sys/net/netfilter/nf_conntrack_tcp_timeout_established 
默认是432000=3600*24*55天的超时时间,超时后清空对应的那条记录。改为3600或者1800,表示1小时或者半小时后就超时回收。
 
cat /proc/sys/net/netfilter/nf_conntrack_max
我查了下,对于Centos6.5,这个参数默认是31636,也就说默认累计连接数在五天内达到这个值就不能再进行连接。显然这样不行。具体改大点也无所谓,这个参数到底最大多少呢,目前没时间找源码的位置,不知道这个参数的结构类型,无法确定,老外说改大点没事。参考值是1048576。
 
cat /proc/sys/net/netfilter/nf_conntrack_buckets 
nf_conntrack_max表示记录的总量,nf_conntrack_buckets表示表的数目,类似数据库的理解,一张数据库的表(tables)可以存放很多条记录(count)。通常这两个参数设置为一样大。
 
另外对于不同的tcp状态会有不同参数名称,还有基于udp的配置参数。
 
所有ip_conntrack参数如下:
[root@thy /]# ls -l /proc/sys/net/netfilter |awk '{print $NF}'
nf_conntrack_acct
nf_conntrack_buckets
nf_conntrack_checksum
nf_conntrack_count
nf_conntrack_events
nf_conntrack_events_retry_timeout
nf_conntrack_expect_max
nf_conntrack_generic_timeout
nf_conntrack_icmpv6_timeout
nf_conntrack_log_invalid
nf_conntrack_max
nf_conntrack_tcp_be_liberal
nf_conntrack_tcp_loose
nf_conntrack_tcp_max_retrans
nf_conntrack_tcp_timeout_close
nf_conntrack_tcp_timeout_close_wait
nf_conntrack_tcp_timeout_established
nf_conntrack_tcp_timeout_fin_wait
nf_conntrack_tcp_timeout_last_ack
nf_conntrack_tcp_timeout_max_retrans
nf_conntrack_tcp_timeout_syn_recv
nf_conntrack_tcp_timeout_syn_sent
nf_conntrack_tcp_timeout_time_wait
nf_conntrack_tcp_timeout_unacknowledged
nf_conntrack_udp_timeout
nf_conntrack_udp_timeout_stream
nf_log
最后编辑:
作者:saunix
大型互联网公司linux系统运维攻城狮,专门担当消防员

留下一个回复