web-dev-qa-db-ja.com

「TCP:バケットテーブルオーバーフローの待機時間」エラーに圧倒されました-軽減するにはどうすればよいですか?

OpenVZコンテナをホストするDebian7(proxmox)を実行しているレガシーシステムがあり、Apacheフロントエンドを実行しているVZコンテナへのオープン接続によってシステムが圧倒されるという厄介な問題が発生しています。

これが発生すると、サーバーのログは数千の「TCP:待機バケットテーブルオーバーフロー(CT233)」エラーでいっぱいになります。これは、Webサーバーからの応答が遅いことと相まっています。この問題を軽減するために私にできることはありますか?

グーグルした後、私はさまざまなconntrack設定にいくつかの調整を加えましたが、影響が何であるか(または、実際に、これが実際に役立つ可能性が高いかどうか)をよりよく理解せずに、過激すぎることをするのは気が進まなかったいずれにせよ)

状況を把握するために、これが今日発生したときの「sysctl -a | grepconntrack」の出力を次に示します。

net.netfilter.nf_conntrack_generic_timeout = 480
net.netfilter.nf_conntrack_tcp_timeout_syn_sent = 120
net.netfilter.nf_conntrack_tcp_timeout_syn_recv = 60
net.netfilter.nf_conntrack_tcp_timeout_established = 345600
net.netfilter.nf_conntrack_tcp_timeout_fin_wait = 120
net.netfilter.nf_conntrack_tcp_timeout_close_wait = 60
net.netfilter.nf_conntrack_tcp_timeout_last_ack = 30
net.netfilter.nf_conntrack_tcp_timeout_time_wait = 120
net.netfilter.nf_conntrack_tcp_timeout_close = 10
net.netfilter.nf_conntrack_tcp_timeout_max_retrans = 300
net.netfilter.nf_conntrack_tcp_timeout_unacknowledged = 300
net.netfilter.nf_conntrack_tcp_loose = 1
net.netfilter.nf_conntrack_tcp_be_liberal = 0
net.netfilter.nf_conntrack_tcp_max_retrans = 3
net.netfilter.nf_conntrack_udp_timeout = 30
net.netfilter.nf_conntrack_udp_timeout_stream = 180
net.netfilter.nf_conntrack_icmp_timeout = 30
net.netfilter.nf_conntrack_acct = 0
net.netfilter.nf_conntrack_events = 1
net.netfilter.nf_conntrack_events_retry_timeout = 15
net.netfilter.nf_conntrack_max = 131072
net.netfilter.nf_conntrack_count = 128397
net.netfilter.nf_conntrack_buckets = 32768
net.netfilter.nf_conntrack_checksum = 1
net.netfilter.nf_conntrack_log_invalid = 0
net.netfilter.nf_conntrack_expect_max = 256
net.nf_conntrack_max = 131072

これには、今日行ったいくつかの変更が含まれます。nf_conntrack_bucketsを16384から32768に倍増し、conntrack_generic_timeoutを600から480に縮小し、conntrack_tcp_timeout_establishedを5dから4dに縮小しました。

常に開いている接続の大部分はTIME_WAITにあります。

TCP /カーネルのチューニングについて私がお勧めできる以上の知識を持っている人がいることを願っています。

ありがとう!

1
Ross Messiah

「net.ipv4.tcp_max_tw_buckets」と「net.ipv4.tcp_max_tw_buckets_ub」の2つの変数を調整しましたが、これらの変更を行ってから「時間待機バケットテーブルオーバーフロー」エラーは再発していません。しかし、来週かそこらの間にそれを監視し、これが実際に問題を解決したかどうかを確認するつもりです。

0
Ross Messiah