我正在使用Ubuntu 11.10& Nginx的.我的服务器目前正在做大约350 rps(这是正在进行的负载).我使用iptables来确保某些端口上的连接仅限于我拥有的盒子.
我注意到nf_conntrack_count不断增加.无论我将nf_conntrack_max推送到什么地方,nf_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.我绝对没有650,000连接到我的盒子(单个IP,所以我没有那么多端口).
知道发生了什么或我能做些什么来解释它?如果你需要更多数字,我可能会得到它们.
请注意,我的大部分连接都是HTTP(唯一的例外是我的ssh会话),并且Nginx中的keepalive超时设置为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有效,条目就会在连接跟踪表中保留.
随着我获得更多信息,将添加此答案.