为什么nf_conntrack_count不断增加?

我使用Ubuntu 11.10&nginx。 我的服务器目前的速度大约为350 rps(这是负载进来)。 我使用iptables来确保某些端口上的连接仅限于我自己的盒子。

我注意到nf_conntrack_count不断增加。 不pipe我推nf_conntrack_maxnf_conntrack_count在一天内匹配。 此外,它不符合netstat -tn告诉我的。 这里是数字:

 $ sudo sysctl net.netfilter.nf_conntrack_count net.netfilter.nf_conntrack_max net.netfilter.nf_conntrack_count = 649715 net.netfilter.nf_conntrack_max = 650000 $ netstat -tn | awk '{n[$6]++} END { for(k in n) { print k, n[k]; }}' CLOSING 6 ESTABLISHED 2933 FIN_WAIT1 116 FIN_WAIT2 3447 LAST_ACK 35 SYN_RECV 79 TIME_WAIT 27141 $ sudo conntrack -L | awk '{n[$4]++}; END {for(k in n) { print k, n[k]; }}' conntrack v1.0.0 (conntrack-tools): 648611 flow entries have been shown. CLOSE 443 CLOSE_WAIT 2210 ESTABLISHED 645529 FIN_WAIT 45 LAST_ACK 50 SYN_RECV 74 TIME_WAIT 259 

我不想继续增加nf_conntrack_max直到我确切地知道发生了什么。 我肯定没有65万个连接到我的盒子(单个IP,所以我没有那么多的端口)。

任何想法发生了什么或我能做些什么来解释它? 如果你需要更多的数字,我可以得到它们。

请注意,我的大部分连接都是HTTP(唯一的例外是我的ssh会话),并且nginx中的存活超时设置为15秒。 另外net.netfilter.nf_conntrack_tcp_timeout_time_wait = 1

任何帮助赞赏。

我可能有一个线索。 来自conntrack -L的超时字段有几个值在430,000秒的范围内。 这看起来可疑接近nf_conntrack_tcp_timeout_established的默认值。 我已经调整了nf_conntrack_tcp_timeout_established到300,并且表中的所有新条目的超时值都小于300.这似乎表明,只要tcp_timeout_established有效,条目在连接跟踪表中保持不变。

随着我获得更多信息,将添加到这个答案。