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

前端之家收集整理的这篇文章主要介绍了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相关文章