web-dev-qa-db-ja.com

nf_conntrack_countが増加し続けるのはなぜですか?

Ubuntu 11.10とnginxを使用しています。私のサーバーは現在約350 rpsを実行しています(これが負荷です)。 iptablesを使用して、特定のポートでの接続が自分が所有するボックスにのみ制限されるようにしています。

nf_conntrack_countが増え続けていることに気づきました。 nf_conntrack_maxを何にプッシュしても、nf_conntrack_countは1日以内に一致します。さらに、それは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のキープアライブタイムアウトは15秒に設定されています。またnet.netfilter.nf_conntrack_tcp_timeout_time_wait = 1

助けてくれてありがとう。

5
bluesmoon

手がかりがあるかもしれません。 conntrack -Lのタイムアウトフィールドには、430,000秒の範囲にあるいくつかの値があります。これはnf_conntrack_tcp_timeout_establishedのデフォルト値に疑わしいように見えます。 nf_conntrack_tcp_timeout_establishedを300に調整しました。テーブル内のすべての新しいエントリのタイムアウト値は300未満です。これは、tcp_timeout_establishedが有効である限り、エントリが接続追跡テーブル内に留まることを示唆しています。

より多くの情報を得ると、この答えに追加されます。

6
bluesmoon