linux – 为什么nf_conntrack_count会不断增加?

我正在使用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有效,条目就会在连接跟踪表中保留.

随着我获得更多信息,将添加此答案.

相关文章

在Linux上编写运行C语言程序,经常会遇到程序崩溃、卡死等异...
git使用小结很多人可能和我一样,起初对git是一无所知的。我...
1. 操作系统环境、安装包准备 宿主机:Max OSX 10.10.5 虚拟...
因为业务系统需求,需要对web服务作nginx代理,在不断的尝试...
Linux模块机制浅析 Linux允许用户通过插入模块,实现干预内核...
一、Hadoop HA的Web页面访问 Hadoop开启HA后,会同时存在两个...